选择排序的核心思路很直接:每一趟从待排序列里挑一个最小(或最大)的记录,放到已排序序列的末尾。第1趟从n个记录中选最小,第2趟从剩下的n-1个选次小,重复到全部有序。下面分别聊聊直接选择排序、树形选择排序和堆排序的Java实现。
直接选择排序
直接选择排序就是两重循环:外层控制已排序边界,内层在未排序区找最小元素的下标,找到后与边界交换。

用序列 { 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;
}
}
}
时间复杂度始终是 O(n²),哪怕数据已经有序,内层循环照样跑完。空间 O(1),交换时可能打乱相等元素的相对位置,所以不稳定。













