排序算法 - 选择排序

基本思路

先默认未排序区首个元素为最小,然后从后面的元素中挑出最小的元素,与这个元素交换,直至循环完成。

算法代码

 1 //简单的选择排序
 2 void SelectSort(int *arr, int n)
 3 {
 4     int i, j;
 5     int temp;
 6     int minIndex;
 7     for (i = 0; i < n - 1; i++) //做第i趟排序,共n-1趟,因为第n趟只剩一个一定是最大的
 8     {
 9         minIndex = i;
10         for (j = i + 1; j < n; j++)
11         {
12             if (arr[j] < arr[minIndex])
13                 minIndex = j;
14         }
15         if (minIndex != i) //后面有更小的元素
16         {
17             temp = arr[i];
18             arr[i] = arr[minIndex];
19             arr[minIndex] = temp;
20         }
21     }
22 }

算法分析

从i个记录中挑选最小记录需要比较i-1次。

第i(i=0~n-2)趟从n-i记录中挑选最小记录需要比较n-i-1。

对 n 个记录进行简单选择排序,所需进行的关键字的比较次数 总计为:

 

移动记录的次数,正序为最小值 0,反序为最大值3(n-1) 。

简单选择排序的最好、最坏和平均时间复杂度为O(n2)

 

posted @ 2019-08-15 21:39  WindSun  阅读(276)  评论(0编辑  收藏  举报
博客已停更,文章已转移,点击访问