五行关键代码解决数组排序

数组排序算法,模仿快速排序。当然达不到O(nlogn)的时间复杂度。
先上快速排序的方法,我比较喜欢这种二分法。

function quick(arr) {
  if (arr.length < 2) return arr      // 递归出口,长度小于2无需再排序
  let midArr = Math.floor(arr.length/2)       // 切一半下标
  let midNum = arr.splice(midArr, 1)[0]
  let [left, right] = [[], []]        // 左右数组
  for (let i = 0; i < arr.length; i++) {
    const el = arr[i];
    if (el <= midNum) {
      left.push(el)
    }else {
      right.push(el)
    }
  }
  return quick(left).concat(midNum, quick(right))     // 递归,连接两个数组
}

平时开发没事的时候会对其进行简化增加代码可读性,考虑到以下这种方法。

function quick(arr) {
  if (arr.length < 2) return array        // 最后递归,递归出口
  let last = arr[arr.length - 1]       // 最后一个元素
  let arrRight = arr.filter((v, i) => v>last)         // 右边切(不可相等,考虑最后一个元素)
  let arrLeft = arr.filter((v, i) => v<=last && i!= arr.length-1)        // 左边切(可相等,考虑两个同样的元素)
  return [...quick(arrLeft), last, ...quick(arrRight)]
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值