选择排序
(1)算法的介绍
选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在给出的arr数组中找到最小(大)元素,存放到arr数组的起始位置,然后再从arr未排序的元素中继续寻找最小(大)元素,然后放到arr第二个位置。以此类推,直到所有元素均排序完毕。
(2)算法的原理
1、在 [L ... N-1] 范围内找出最小项目 X 的位置,
2、用第 L 项与X项交换,
3、在 [L+1 ... N-1] 范围重复步骤1和步骤2,直到 L = N-2。
(3)动态图演示

(4)实现
public static void selectionSort(int[] arr) {
// 1.参数判断
if (arr == null || arr.length < 2) return;
// 0 ~ N - 1 找到最小值,与 0 位置上数交换
// 1 ~ N - 1 找到最小值,与 1 位置上数交换
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) { // i ~ N-1上找到最小值的下标
minIndex = arr[minIndex] < arr[j] ? minIndex : j;
}
swap(arr, i, minIndex);
}
}
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
(5)算法评估
- 时间复杂度:$O(N^2)$
- 空间复杂度:$O(1)$
代码地址:https://github.com/cosmos-lin/Algorithm2021/blob/master/src/sort_algorithm/SelectionSort.java

浙公网安备 33010602011771号