18 极客大学-算法训练营-覃超-第十八课.pdf

排序算法

18.初级排序与高级排序 - 图1

参考链接

参考链接


  • 基础排序算法

    • 冒泡排序

      1. // 基础版本 O(n^2)
      2. function bubbleSort(arr){
      3. for(let i=0; i<arr.length;i++){
      4. for(let j=0; j<arr.length-1;j++){
      5. if(arr[j] < arr[j+1]){
      6. [arr[j], arr[j+1]] = [arr[j+1], arr[j]]
      7. }
      8. }
      9. }
      10. return arr;
      11. }
      12. // 改进版本1 O(n^2) 随着冒泡的进行,后续已经有序,无需对比
      13. function bubbleSort(arr){
      14. for(let i=0; i<arr.length;i++){
      15. // 随着冒泡的进行,后续已经有序,无需对比
      16. for(let j=0; j<arr.length-1-i;j++){
      17. if(arr[j] < arr[j+1]){
      18. [arr[j], arr[j+1]] = [arr[j+1], arr[j]]
      19. }
      20. }
      21. }
      22. return arr;
      23. }
      24. // 改进版本2 O(n)
      25. function bubbleSort(arr){
      26. for(let i=0; i<arr.length;i++){
      27. let flag = true;
      28. // 随着冒泡的进行,后续已经有序,无需对比
      29. for(let j=0; j<arr.length-1-i;j++){
      30. if(arr[j] < arr[j+1]){
      31. [arr[j], arr[j+1]] = [arr[j+1], arr[j]]
      32. flag = false;
      33. }
      34. }
      35. // 如果没有发生变更,说明数组有序
      36. if(flag === true){
      37. return arr;
      38. }
      39. }
      40. return arr;
      41. }
    • 插入排序

选择排序的关键字是“最小值”:循环遍历数组,每次都找出当前范围内的最小值,把它放在当前范围的头部;然后缩小排序范围,继续重复以上操作,直至数组完全有序为止。

  1. function selectSort(arr){
  2. let len = arr.length;
  3. let minIndex = 0;
  4. for(let i=0; i<len-1;i++){
  5. minIndex = i;
  6. for(let j=i;j<len;j++){
  7. if(arr[j]<arr[minIndex]){
  8. minIndex = j;
  9. }
  10. }
  11. if(minIndex !== i){
  12. [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]]
  13. }
  14. }
  15. return arr;
  16. }
  • 选择排序
    • 进阶排序算法
  • 归并排序
  • 快速排序