前言
选择排序的核心思想是每一趟从待排序列中选取一个关键字值最小的记录。第 1 趟从 n 个记录中选出最小值,第 2 趟从剩下的 n-1 个记录中选出次小值,依此类推,直到所有记录都归位。通过这种'选'与'换'的操作,最终得到有序序列。
1. 直接选择排序
核心思想
首先在所有记录中选出关键字值最小的记录,把它与第一个记录进行位置交换;然后在其余的记录中再选出关键字值次小的记录与第二个记录进行位置交换,依此类推,直到所有记录排好序。
下图直观展示了直接选择排序的整个过程:

示例演示
假设待排序的 8 个记录的关键字序列为 { 5, 3, 6, 4, 7, 1, 8, 2 }。初始序列视为无序序列,每趟从无序区选择最小值与无序区首元素交换。

每趟遍历完成后,有序序列记录的个数 +1,无序序列的个数 -1。图中红色区域表示已排序部分。
代码实现
public void selectSort() {
RecordNode temp;
// 进行 i-1 次遍历,this.curlen 为数组长度
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;
}
}
}




















