JS中的排序

JS中的排序

tip 可以使用 console.time("冒泡排序") 和 console.timeEnd("冒泡排序") 计算循环需要的时间

1. 冒泡排序------参考地址菜鸟教程

基本步骤

  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。
  • 最后的元素会是最大的数。
  • 针对所有的元素重复以上的步骤,除了最后一个。
  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

在这里插入图片描述
代码实现

let arr = [20,30,15,28,13,5]
console.time("冒泡排序")
for (let i = 0; i < arr.length - 1; i++) {
  for (let j = 0; j < arr.length - i - 1; j++) {
    if(arr[j] > arr[j + 1]) {
      let temp = arr[j]
      arr[j] = arr[j + 1]
      arr[j + 1] = temp
    }
  }
}
console.log(arr, '冒泡排序') // [5, 13, 15, 20, 28, 30] "冒泡排序"
console.timeEnd("冒泡排序") // 冒泡排序: 0.38623046875 ms

2. 快速排序------参考地址阮一峰的网络日志

基本步骤 :

  • 在数据集之中,选择一个元素作为"基准"(pivot)。
  • 所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。
  • 对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
    在这里插入图片描述
    代码实现
    其中splice方法会改变原数组
    let arr = [201,310,152,218,103,225]
    // 快速排序
    function quickSort(arr) {
      if(arr.length <= 1) return arr
      // 获取中间数的索引
      const getMiddleIndex = Math.floor(arr.length / 2)
      // 获取中间数
      getMiddle = arr.splice(getMiddleIndex, 1)[0]
      let leftArr = [],rightArr = []
      for (let index = 0; index < arr.length; index++) {
        const element = arr[index];
        if(element < getMiddle) leftArr.push(element)
        else rightArr.push(element)
      }
      return quickSort(leftArr).concat([getMiddle],quickSort(rightArr))
    }
    console.time("快速排序")
    const result = quickSort(arr)
    console.log(result, '快速排序') // [103, 152, 201, 152, 225, 310] "快速排序"
    console.timeEnd("快速排序") // 快速排序: 0.227783203125 ms
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值