Open
Description
简介
排序算法 | 时间复杂度 | 是否基于比较 |
---|---|---|
冒泡、插入、选择 | O(n²) | √ |
快排、归并 | O(nlogn) | √ |
桶、计数、基数 | O(n) | × |
选择排序,将数据分为已排序和未排序区间,然后每次从未排序区间选择一个最小的数,将其放到已排序区间末尾,重复这个过程,直到未排序区间为空。
代码
function selectionSort(arr) {
const n = arr.length
if (n <= 1) return
let minIdex
for (let i = 0; i < n-1; i++) {
minIndex = i
for (let j = i+1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j
}
}
swap(arr, minIndex, i)
}
}
function swap(arr, i, j) {
const temp = arr[i]
arr[i] = arr[j]
arr[j] = temp
}
const arr = [64, 25, 12, 22, 11]
selectionSort(arr) // [11, 12, 22, 25, 64]
动画演示
总结
- 最好,最坏,平均时间复杂度都是 O(n²),空间复杂度是 O(1)
- 是一个不稳定的排序算法,因为每次都要从未排序区间里选取最小的数,去跟前面的数交换,这样就破坏了稳定性。