选择排序详解
选择排序的核心思想非常直观:每一趟从待排序列中选取一个关键字值最小的记录,将其放到已排序序列的末尾。具体来说,第 1 趟从 n 个记录中选出最小值,第 2 趟从剩下的 n-1 个记录中选出次小值,直到整个序列有序。
核心思路
直接选择排序
在所有记录中选出关键字值最小的记录,把它与第一个记录进行位置交换;然后在其余的记录中再选出关键字值次小的记录与第二个记录进行位置交换,依此类推。
这里有一张经典的动图展示整个过程:

实例演示
假设待排序的 8 个记录的关键字序列为 { 5,3,6,4,7,1,8,2}。初始序列视为无序序列,每趟从无序区选最小跟无序区第一个数交换,构成有序区。

注意,每趟序列遍历完后,有序序列记录的个数 +1,无序序列的个数 -1。
代码实现
public void selectSort() {
RecordNode temp;
for (int i = 0; i < this.curlen - 1; i++) {
int min = i;
// 找到一个最小的
for (int j = i + 1; j < this.curlen; j++) {
if (r[j].key.compareTo(r[min].key) < 0) {
min = j;
}
}
if (min != i) {
temp = r[i];
r[i] = r[min];
r[min] = temp;
}
}
}
性能分析




















