选择排序(Selection Sort)是一种简单的排序算法,它的基本思想是每次从未排序的数据中找出最小(或最大)元素,并将其放到已排序的数据的末尾。

选择排序的步骤如下:

  1. 从未排序的数据中找出最小(或最大)元素。
  2. 将最小(或最大)元素与当前元素交换位置。
  3. 将当前元素标记为已排序。
  4. 重复步骤 1-3,直到整个数据被排序。

demo

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function selectionSort(data = []) {
for (let i = 0; i < data.length; i++) {
let min = i;
for (let j = i + 1; j < data.length; j++) {
if (data[min] > data[j]) {
min = j;
}
}
// let temp = data[i];
// data[i] = data[min];
// data[min] = temp;
// 简化
[data[i], data[min]] = [data[min], data[i]];
}
return data;
}
selectionSort([5, 2, 8, 3, 1, 6, 4]);

可视化

优缺点

选择排序的优点是:

  • 简单易懂
  • 实现容易
  • 时间复杂度为 O(n^2),适合小规模数据排序

选择排序的缺点是:

  • 时间复杂度高,不适合大规模数据排序
  • 不稳定排序算法(如果两个元素相等,可能会交换它们的位置)

选择排序的应用场景:

  • 小规模数据排序
  • 需要简单易懂的排序算法
  • 不需要高效的排序算法