1 static void Main(string[] args) 2 { 3 int n; 4 n = int.Parse(Console.ReadLine()); 5 int[] SeqList = new int[n]; 6 for (int i = 0; i < n; i++) 7 { 8 SeqList[i] = Convert.ToInt32(Console.ReadLine()); 9 } 10 SelectSort(SeqList); 11 foreach (var str in SeqList) 12 { 13 Console.Write(str + " "); 14 } 15 Console.ReadKey(); 16 17 } 18 static void SelectSort(int[] s) 19 { 20 int i, j, k, temp; 21 for (i = 0; i < s.Length - 1; i++) //n-1次排序对n-1个记录进行了排序,此时剩下的一个记录必定是最大的,因此要做n-1次排序 22 { 23 k = i; //k起一个实时保存最小值的作用 24 for (j = i + 1; j < s.Length; j++) 25 if (s[j] < s[k]) 26 k = j; 27 if (k != i) 28 { 29 temp = s[i]; 30 s[i] = s[k]; 31 s[k] = temp; 32 } 33 } 34 }
假设有这样一组序列:70 30 40 10 80 20 90 100 75 60 45
第一趟70与30比,大于,k取30的索引,交换,此时k=1;s[k]再与40比较,小于,跳出,s[k]仍旧为30;再与10比较,大于,k取10的索引3,交换,依次类推。
第一趟完成后为10 30 40 70 80 30 90 100 75 60 45 此时已将最小的数排在了第一位
接下来便是把第二小的数排在第二位......
时间复杂度
第一次进行n-1次比较,第二次排序要进行n-2次比较,第n-1次排序要进行1次比较,索引总的次数为n(n-1)/2,复杂度为O(n^2)