前言
选择排序的核心思想是每一趟从待排序列中选取一个关键字值最小(或最大)的记录,将其放到已排序序列的末尾。第 1 趟从 n 个记录中选出最小值,第 2 趟从剩下的 n-1 个记录中选出次小值,直到所有记录归位。
1. 直接选择排序
思想
首先在所有记录中选出关键字值最小的记录,把它与第一个记录进行位置交换;然后在其余记录中再选出关键字值次小的记录与第二个记录交换,依此类推,直到所有记录排好序。
下图展示了直接选择排序的完整过程:

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

每趟遍历完成后,有序序列记录个数 +1,无序序列个数 -1。
代码实现
为了统一示例风格,这里使用 int[] 数组演示核心逻辑:
public void selectSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
// 进行 i-1 次遍历,arr.length:数组的长度
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
// 在剩余未排序部分找到最小值的索引
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
(minIndex != i) {
arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}



















