选择排序系列详解
选择排序的核心思想其实很直观:每一趟从待排序列中选取一个关键字值最小(或最大)的记录,通过交换位置逐步构建有序序列。第 1 趟从 n 个记录中选出最小值放到第 1 位,第 2 趟从剩下的 n-1 个记录中选出次小值放到第 2 位,直到所有记录归位。
直接选择排序
原理与过程
直接选择排序是最基础的选择排序方式。它的基本操作是:在所有记录中选出关键字最小的记录,把它与第一个记录进行位置交换;然后在其余记录中再选出关键字次小的记录与第二个记录交换,依此类推。
下图展示了直接选择排序的完整过程:

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

每趟遍历完成后,有序序列记录的个数加 1,无序序列的个数减 1。虽然逻辑简单,但它的效率并不高,因为无论数据是否有序,比较次数都是固定的。
代码实现
public void selectSort() {
RecordNode temp; // 定义一个临时变量 temp
for (int i = 0; i < this.curlen - 1; i++) { // 进行 i-1 次遍历,this.curlen:数组的长度
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;
}
}
}




















