JS之快速排序

    对于初学代码的同学们来说,它可谓是初学代码者的一个噩梦,相当晦涩难懂。笔者在初学代码阶段也是被它深深的教育了,不过现在它成为了我随手写代码时候最喜欢的一个选择。回过头来,对他的理解也逐渐加深。

快速排序核心就在递归,而递归的核心就在一递一归。
  • 递:重复对自身进行调用
  • 归:找到出口,进行return
    function quickSort(arr){
        if(arr.length <=1){//递归的出口,如果递归到数组为一个或者零个元素,则返回
            return arr //注意!此处不可以 arr.length === 1,举例:假设选取的midIndex为0,在末尾的时候return quickSort(left)也必须返回而不是继续递归下去
        }

        let midIndex =  Math.floor(arr.length/2) //随机选取一个元素
        let leftArr=[];//定义一个左数组来存放大的元素
        let rightArr=[];//定义一个右数组来存放大的元素

        for(let i=0;i<arr.length;i++){
            if(i===midIndex) continue //如果遍历到midIndex这个元素,直接跳过
            if(arr[i]>=arr[midIndex]){
                rightArr.push(arr[i])//遍历到的元素大于选中元素,则push到右边数组
            }else{
                leftArr.push(arr[i])//小于的时候则push到左边数组
            }
        }

        //进行数组合并  左侧数组+中间数组+右侧数组
        return quickSort(leftArr).concat(arr[midIndex],quickSort(rightArr))
    }

    console.log(quickSort([1,2,3,4,0,5423,32,1,23,435,75]));

总结: 代码或者算法这个东西就是要不断的写,不断的去消化去理解,本人也是从第一次写的时候的一脸懵逼到现在对递归对快排有较深的理解了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值