快速排序

2020-04-20  本文已影响0人  晓丽_c080

在网上找了几种方法做了一下总结

第一种:

1、找基准(一般是以中间项为基准)

2、遍历数组,小于基准的放在left,大于基准的放在right

3、递归

  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));

    }                        

第二种:

利用es6 使用数组的首个元素作为基准点,然后利用filter函数过滤并返回新数组,最后递归

  function quickSort(arr) {

return arr.length <=1 ? arr : quickSort(arr.slice(1).filter(v=> v<arr[0])).concat(arr[0],quickSort(arr.slice(1).filter(v=>v>=arr[0])))

}

上一篇 下一篇

猜你喜欢

热点阅读