排序算法总结

JavaScript实现十大排序算法,代码+动图+在实现代码的时候遇到的坑

冒泡算法

(1) 实现思路

不断的重复的对比相邻的两个元素,把大(小)的移到一个方向去

(2) 代码实现:
bubbleSort (arr) {
    let len = arr.length
    for (let i = 0; i < len; i++) {
      for (let j = 0; j < len - i - 1; j++) {
        if (arr[j + 1] < arr[j]) {
          [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
        }
      }
    }
    return arr
  }
(3)写代码时候容易犯的思路错误:

在if (arr[j + 1] < arr[j]) 这块用 arr[j] 和 arr[i]做比较,
冒泡排序中,外圈循环只是用来计数的。需要做比较的是相邻的两项,就是arr[j] & arr[j + 1]


(4) 动画效果
冒泡排序.png


选择排序

(1) 实现思路

每一次直接选出最小(大)的一个,不断重复

seleteSort (arr) {
    let len = arr.length
    for (let i = 0; i < len; i++) {
      let minIndex = i
      for (let j = i + 1; j < len; j++) {
        if (arr[j] < arr[minIndex]) {
          [arr[minIndex], arr[j]] = [arr[j], arr[minIndex]]
          minIndex = j
        }
      }
    }
    return arr
  },

插入排序

  insertSort (arr) {
    let len = arr.length
    for (let i = 0; i < len; i++) {
      let index = i
      for (let j = i - 1; j >= 0; j--) {
        if (arr[j] > arr[index]) {
          [arr[j], arr[index]] = [arr[index], arr[j]]
          index = j
        }
      }
    }
    return arr
  },

快速排序

  quickSort (arr) {
    let len = arr.length
    if (len <= 1) return arr
    let pivot = Math.floor(len / 2)
    let item = arr.splice(pivot, 1)
    let left = []
    let right = []
    for (let i = 0; i < len - 1; i++) {
      if (arr[i] < item) {
        left.push(arr[i])
      } else {
        right.push(arr[i])
      }
    }
    return this.quickSort(left).concat(item, this.quickSort(right))
  }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 接触U3D以来,我做过的场景漫游实现方式一般有以下几种: Unity3d中的Animation组件,通过设置摄像机...
    道阻且长_行则将至阅读 6,842评论 0 0
  • 读在职法律硕士已经一个月了,感觉又回到了学生时代,但疲惫感又远甚于学生时代。因为学校离住所太远,为了早上能多睡...
    No_No_阅读 278评论 0 0
  • 从珠海到中山故居再到东莞,回到凯景酒店,终于有回家的感觉,一场王者盛宴在等待我们。 旅途发生了很多,在中山故...
    陳毓沣阅读 200评论 0 0
  • 想去,但听说真的都是屎粑粑。 牧民不易,终于知道他们为何不洗澡(特别是在冬牧场上,水源全来自于降雪,连正常...
    烟落且听尘阅读 773评论 4 2