选择排序(Selection Sort)
一、思路
1、先找到数组中的最小元素,然后跟数组的第一个元素交换位置。
2、在剩下的元素中找到最小元素,然后跟数组的第二个元素交换位置。
3、如此重复,直到将整个数组排序好。
二、代码实现
public static void sort(Comparable[] a) { int N = a.length; for(int i = 0; i < N; i++) { //find the index of minimum from i to N-1 int min = i; for(int j = i+1; j < N; j++) { if(less(a[j], a[min])) min = j; } exch(a, i, min);//put a[min] in a[i] } }
三、性能分析
结论:对于长度为N的数组,选择排序需要~N2/2次比较和N次交换。
分析:
由代码可知,对外循环每个i,内部循环都需要N-1-i次比较和一次交换。
所以总的比较次数为(N-1) + (N-2) + ……+ 2 + 1 + 0 = N(N-1)/2~N2/2。
总的交换次数为N。