排序算法 平均时间复杂度 最好情况 最坏情况 空间复杂度 排序方式 稳定性
冒泡算法 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. 代码实现

  1. function BubbleSort(arr) {
  2. // 缓存数组长度
  3. const len = arr.length;
  4. // 外层循环用于控制从头到尾的比较+交换到底有多少轮
  5. for (let i = 0; i < len - 1; i++) {
  6. // 内层循环用于完成每一轮遍历过程中的重复比较+交换
  7. for (let j = 0; j < len - 1 - i; j++) {
  8. // 若相邻元素前面的数比后面的大
  9. if (arr[j] > arr[j + 1]) {
  10. // 交换两者(方案1)
  11. [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
  12. // 交换两者(方案2)
  13. // var temp = arr[j];
  14. // arr[j] = arr[j+1];
  15. // arr[j+1] = temp;
  16. }
  17. }
  18. }
  19. // 返回数组
  20. return arr;
  21. }

2. 动画演示

排序算法 - 图1

二、选择排序

  1. function SelectionSort(){
  2. }

参考链接