排序算法

 

 
 
                产生随机数进行测试
    function randomNum(num) {
      const data = []
      for (let i = 0; i < num; i++) {
        const val = Math.round(Math.random() * 100)
        data.push(val)
      }
      return data
    }

  

一。插值排序算法:从小到大排序 => 思想是通过当前值与前一个值进行比较判断数组 i - 1 的值是否大于当前值,是就将 i - 1 的值替换成大的值,然后再取数组的 i - 1 -1... 的值与当前值比较,直到前面的值小于当前值为止或取到数组的第一个值为止。重复直到对该数组循环排序完成。

 

                    插值排序算法
      function insertionSort(data = []) {
      if (typeof data === 'object' && JSON.stringify(data).indexOf('[') === 0 && data.length > 0) {
        for (let i = 1; i < data.length; i++) {
          const val = data[i]
          let j = i - 1
          for (j; j > -1 && data[j] > val; j--) {
            data[j + 1] = data[j]
          }
          data[j + 1] = val
        }
        return data
      } else {
        console.log('类型只能为数组且长度大于0')
      }
    }

 

二。快速排序:从小到大排序 => 首先找数组中间的一个值为基准,然后通过循环比较得出小于的值、等于的值、大于的值,然后递归调用,最后将数组拼接起来。

                        快速排序算法  
    function fastSort(data = []) {
      if (data.length > 1) {
        const centerVal = data.splice(Math.floor(data.length / 2), 1)[0]
        const leftData = []
        const centerData = [centerVal]
        const rightData = []
        for (let i = 0; i < data.length; i++) {
          if (data[i] > centerVal) {
            rightData.push(data[i])
          }
          if (data[i] === centerVal) {
            centerData.push(data[i])
          }
          if (data[i] < centerVal) {
            leftData.push(data[i])
          }
        }
        return fastSort(leftData).concat(centerData, fastSort(rightData))
      } else {
        return data
      }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值