一、定义
选择排序法是一种不稳定的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。
二、算法示例讲解(Java)
public static void selectSort(int[] array) {
if (array == null || array.length < 2) {
return;
}
// 外层循环控制遍历的轮数,每轮找出剩余未排序部分中的最小(或最大)元素
for (int i = 0; i < array.length - 1; i++) {
// 假设当前未排序部分的第一个元素为最小值
int minIndex = i;
// 内层循环在剩余未排序部分中寻找最小值的索引
for (int j = i + 1; j < array.length; j++) {
// 如果找到更小的元素,则更新minIndex
if (array[j] < array[minIndex]) {
minIndex = j;
}
}
// 将找到的最小值与当前位置的元素交换
if (minIndex != i) {
int temp = array[i];
array[i] = array[minIndex];
array[minIndex] = temp;
}
}
}
第1轮
未排序部分:[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
第2轮
未排序部分:[9, 8, 7, 6, 5, 4, 3, 2, 10]
第3轮
未排序部分:[8, 7, 6, 5, 4, 3, 9, 10]
第4轮
未排序部分:[7, 6, 5, 4, 8, 9, 10]
第5轮
未排序部分:[6, 5, 7, 8, 9, 10]
第6轮
未排序部分:[6, 7, 8, 9, 10]
第7轮
未排序部分:[7, 8, 9, 10]
第8轮
未排序部分:[8, 9, 10]
第9轮
未排序部分:[9, 10]