定义:首先,找到数组中最小的元素,接着,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素就和自己交换);再接着,在剩下的元素中找到最小的元素,将它与第二个元素交换。如此往复。因为不断地选择剩余元素的最小者,故称选择排序
代码:
public class Selection{
public static void sort(Comparable[] a){
int N = a.length;
for(int i = 0; i < N; i++){
int min = i;
for(int j = i + 1; j < N; j++){
if(less(a[j], a[i])){ //比较
exch(a, i, min); //交换
}
}
}
}
}
复杂度:
假设数组长度为N。
比较次数:N + (N - 1) + (N - 2) + …… + 1 ≈ (N * N) / 2
交换次数:N
复杂度:O(N * N)
原序列:03 06 04 02 11 10 05
第一趟:0 2 06 04 03 11 10 05
第二趟:0 2 03 04 06 11 10 05
第三趟:0 2 03 04 06 11 10 05
第四趟:0 2 03 04 05 11 10 06
第五趟:0 2 03 04 05 06 10 11
第六趟:0 2 03 04 05 06 10 11
第七趟:0 2 03 04 05 06 10 11