排序算法 - 选择排序
基本思路
先默认未排序区首个元素为最小,然后从后面的元素中挑出最小的元素,与这个元素交换,直至循环完成。
算法代码
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)。
转载于//www.cnblogs.com/WindSun/p/11360751.html
还没有评论,来说两句吧...