前端常用排序

·  阅读 309

** 以下排序只针对纯数字

冒泡排序

循环数组,当前值与后一项值作比较,如果当前值比后一项值大,则交换位置

function BubbleSort(arr) {
  const list = [...arr]
  Array(list.length - 1)
    .fill()
    .map(_ => {
      list.map((v, index) => {
        if (index < list.length && v > list[index + 1]) {
          list.splice(index, 2, list[index + 1], v)
        }
      })
    })
  return list
}
复制代码

插入排序

准备一个新数组,循环数组,找到新数组中比当前值大的第一个值的索引,如果有,放到它前面,没有则放到新数组的最后

function InsertSort(arr) {
  const list = []
  arr.map(item => {
    const index = list.findIndex(v => v > item)
    index > -1 ? list.splice(index, 0, item) : list.push(item)
  })
  return list
}
复制代码

快速排序

准备两个新数组,每次拿出数组的第一个元素,循环数组,将比它大的放进右边一个新数组,反之放进左边的新数组,然后递归左边和右边的新数组,然后拼接数组

缺点:内存空间占用多

function QuickSort(list) {
  if (list.length < 2) return list
  const flag = list[0]
  const leftList = []
  const rightList = []
  for (let i = 1; i < list.length; i++) {
    list[i] > flag ? rightList.push(list[i]) : leftList.push(list[i])
  }
  return QuickSort(leftList).concat([flag], QuickSort(rightList))
}
复制代码
分类:
前端
标签:
分类:
前端
标签:
收藏成功!
已添加到「」, 点击更改