选择排序思路非常简单。我举个简单的例子。比如大家上学拍毕业照,同学们需要由高到低依次站好。这时候老师会从同学们中选择最高的站在某一边,然后选择次高的再次站在他的旁边,最后以此类推。
所以选择排序的核心思想是每一趟排序都是选择一个最大/最小的值。选择排序也因此得名。
图片来自于网络,纯属打酱油,与本文内容完全不符…
下面我来通过图示来直观的展示整个过程。
如上图所示。由于选择排序会发生跨元素之间的交换,所以他是一种不稳定的排序方法。
下面我将使用JavaScript来实现一下选择排序
function selectSort(seq) {
let i, j, temp, d; // d 标记最小元素的索引
for (i=0;i<seq.length - 1;i++) {
d = i;
// 遍历寻找最小元素的索引
for(j=i;j<seq.length;j++) {
if (seq[j] < seq[d]) {
d = j;
}
}
// 找到的最小元素与当前的元素交换。这会让该排序方式变成不稳定排序
temp = seq[i];
seq[i] = seq[d];
seq[d] = temp;
}
}
selectSort(seq)
console.log(seq) // [1, 2, 3, 4, 5, 6, 6, 7, 9 ]
最后,选择排序因为涉及到两次循环,估计时间复杂度为O(n^2)。