直接选择排序(Straight Select Sorting) 也是一种简单的排序方法,它的基本思想是:
第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,
第二次从R{1}~R[n-1]中选取最小值,与R[1]交换,....,
第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,
第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,
总共通过n-1次,得到一个按排序码从小到大排列的有序序列.
public static void SelectionSort(int[] sortNum)
{ int temp = 0; int baseNum = 0; //第一层循环一共进行了n-1遍历 for (var i = 0; i < sortNum.Length - 1; i++) { //设定一下基准值,每次遍历开始都设置为第一个 //例如:第一次遍历基准为sortNum[0],第二次为sortNum[1] ... baseNum = sortNum[i]; //第二层循环,遍历每一项从中找到最小的,放在最前面 for (var j = i; j < sortNum.Length - 1; j++) { //如果基准值大于该项,就进行交换 if (baseNum > sortNum[j + 1]) { //交换大小值 temp = sortNum[j + 1]; sortNum[j + 1] = sortNum[i]; sortNum[i] = temp; //重新设定基准值为小值 baseNum = temp; } } } }
别人的实现,上面的是通过直接记录最小值,也可以通过记录下标的方式
static List<int> SelectionSort(List<int> list) { //要遍历的次数 for (int i = 0; i < list.Count - 1; i++) { //假设tempIndex的下标的值最小 int tempIndex = i; for (int j = i + 1; j < list.Count; j++) { //如果tempIndex下标的值大于j下标的值,则记录较小值下标j if (list[tempIndex] > list[j]) tempIndex = j; } //最后将假想最小值跟真的最小值进行交换 var tempData = list[tempIndex]; list[tempIndex] = list[i]; list[i] = tempData; } return list; }