js 快速排序

最近看到一个排序,所以自己也看了一下,这里分享一下。

首先创建一个数组

        // 创建一个数组
        const arr = [];

        function random(min, max) {
            return Math.floor(Math.random() * (max - min + 1)) + min;
        }

        function generateArr(len) {
            for (var i = 0; i < len; i++) {
                arr.push(random(1, len));
            }
        }

        generateArr(10);

自己可以试试,看看效果;

然后是重点了,排序的主体函数

        function quickSort(arr){
            //如果数组<=1,则直接返回
            if(arr.length<=1){return arr;}
            var pivotIndex=Math.floor(arr.length/2);
            //找基准,并把基准从原数组删除
            var pivot=arr.splice(pivotIndex,1)[0];
            //定义左右数组
            var left=[];
            var right=[];
            //比基准小的放在left,比基准大的放在right
            for(var i=0;i<arr.length;i++){
                if(arr[i]<=pivot){
                    left.push(arr[i]);
                }else{
                    right.push(arr[i]);
                }
            }
            //递归
            return quickSort(left).concat([pivot],quickSort(right)); // 链接多个数组到 left 从小到大
            // return quickSort(right).concat([pivot],quickSort(left)); // 链接多个数组到 right 从大到小
        }


 console.time("vim")
 var arr1 = Sort(arr)
 console.log(arr1);
 console.timeEnd("vim")

为什么打印时间(自己思考一下,后面解析,记得先思考一下)

好了,排序结束了,是不是很简单呢?但是有个小问题,

这个就是所谓的:阮一峰版的快速排序
https://juejin.im/post/5af4902a6fb9a07abf728c40 看下这个,有人怼他

js高阶函数里面还有一个方法

var arr1 = arr.sort(function (x,y) {
        if (x < y) {
            return -1;
        }
        if (x > y) {
            return 1;
        }
        return 0;
    })

OK了,是不是很放便

然后我试了一下他这里面的方法:
给大家看一组数据

这个就是阮一峰版所得的时间
// vim: 0.087890625ms 十
// vim: 0.41064453125ms
// vim: 7.47900390625ms
// vim: 13.7939453125ms 万
// vim: 72.4541015625ms
// vim: 582.738037109375ms
// vim: 6897.35791015625ms 千万

这里的是另一个时间
// vim: 0.196044921875ms
// vim: 5.68798828125ms
// vim: 4.801025390625ms
// vim: 11.506103515625ms 万
// vim: 38.754150390625ms
// vim: 329.005859375ms
// vim: 4046.4951171875ms 千万
// vim: 50085.428955078125ms

可以看出当超过一万,时间就有了差别,而且当有

一亿条数据的时候,上面的就跑不动了,所以没有时间,但是下面的还有,从这一点可以看出下面的方法确实要强一点!

但是现实中有几个能超过一亿的啊,而且真的超过一亿,我想排序也不会只用这一个方法了!!

其实说实话,我觉得阮一峰版的,比较适合初学者,在没有大数据处理的时候,完全可以使用,当然!具体使用那个还是要看你的选择。

好了,分享就到这啦,感兴趣的小伙伴可以自己试一试,毕竟这里只是我测试的数据,你们也可以留下自己的数据,用来对比一下,毕竟不同的电脑,配置,测出来的数据是不一样的!!

好啦,想要转载的小朋友们,记得注明出处啊

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值