| 排序算法 |
平均时间复杂度 |
最好情况 |
最坏情况 |
空间复杂度 |
排序方式 |
稳定性 |
| 冒泡算法 |
O(n2) |
O(n) |
O(n2) |
O(1) |
In-placee |
稳定 |
| 选择排序 |
O(n2) |
O(n2) |
O(n2) |
O(1) |
In-placee |
不稳定 |
| 插入排序 |
O(n2) |
O(n) |
O(n2) |
O(1) |
In-placee |
稳定 |
| 希尔排序 |
O(n log n) |
O(n log2 n) |
O(n log2 n) |
O(1) |
In-placee |
不稳定 |
| 归并排序 |
O(n log n) |
O(n log n) |
O(n log n) |
O(n) |
Out-placee |
稳定 |
| 快速排序 |
O(n log n) |
O(n log n) |
O(n2) |
O(log n) |
In-placee |
不稳定 |
| 堆排序 |
O(n log n) |
O(n log |
O(n log n) |
O(1) |
In-placee |
不稳定 |
| 计数排序 |
O(n + k) |
O(n + k) |
O(n + k) |
O(k) |
Out-placee |
稳定 |
| 桶排序 |
O(n + k) |
O(n + k) |
O(n2) |
O(n + k) |
Out-placee |
稳定 |
| 基数排序 |
O(n × k) |
O(n × k) |
O(n × k) |
O(n + k) |
Out-placee |
稳定 |
一、冒泡排序
1. 代码实现
function BubbleSort(arr) { // 缓存数组长度 const len = arr.length; // 外层循环用于控制从头到尾的比较+交换到底有多少轮 for (let i = 0; i < len - 1; i++) { // 内层循环用于完成每一轮遍历过程中的重复比较+交换 for (let j = 0; j < len - 1 - i; j++) { // 若相邻元素前面的数比后面的大 if (arr[j] > arr[j + 1]) { // 交换两者(方案1) [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; // 交换两者(方案2) // var temp = arr[j]; // arr[j] = arr[j+1]; // arr[j+1] = temp; } } } // 返回数组 return arr;}
2. 动画演示
二、选择排序
function SelectionSort(){}
参考链接