直接选择排序

 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)

 

posted @ 2018-09-15 09:34  本咒  阅读(142)  评论(0编辑  收藏  举报