js数组快排的实现原理

一.我们平时在使用数组的排序的时候,都是调用的js自带的sort()方法;
var arr = [5,1,8,1,2,9,3,4];
console.log(arr.sort()); //[1,1,2,3,4,5,8,9]
二.其实我们自己可以根据一些简单的方法自己实现,主要实现思路如下:
1.在数据集之中找一个基准点(位于目前的数组的中间的那个数值),
2.建立2个数组,分别存储左边和右边的数组,
3.利用递归进行逐次比较,然后拼接数组达到排序的效果。
function quickSort(arr) {
if (arr.length<=1) {
return arr;
}
var num = Math.floor(arr.length / 2),//找到中间值,如果是浮点数,就向下取整
numValue = arr.splice(num, 1)[0]; //找到中间数的值

        var leftArr = [],
            rightArr = [];
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] < numValue) {
                leftArr.push(arr[i]);
            } else{
                rightArr.push(arr[i]);
            }
        }
        //遍历后的2数组,再调用此方法递归遍历
        return quickSort(leftArr).concat([numValue],quickSort(rightArr));
    }
    //调用测试结果
    var new_arr = quickSort(arr);  //[1,1,2,3,4,5,8,9]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 某次二面时,面试官问起Js排序问题,吾绞尽脑汁回答了几种,深感算法有很大的问题,所以总计一下! 排序算法说明 (1...
    流浪的先知阅读 1,205评论 0 4
  • 排序算法说明 (1)排序的定义:对一序列对象根据某个关键字进行排序; 输入:n个数:a1,a2,a3,…,an 输...
    code武阅读 674评论 0 0
  • 数组排序在日常编程中用到的其实还是比较多的,比如把一组数据按时间排序,按首字母排序,按大小排序等等,那么就让我们一...
    xueNoble阅读 2,177评论 0 9
  • 如何一分钟 改变你的一生 一分钟 60秒能干啥!还不够拉个长粑粑的时间~~~NONO! 这60秒,足以改变你的一生...
    双人鱼莉阅读 423评论 0 5
  • 玉碗吊半空,仙君举酒邀我同。惜意已系念女,洒金杯且随风。 天人不怒月血红,众人如我重。待得红颜蓝月,再...
    水牛郎阅读 247评论 0 1