JavaScript排序算法:快速排序

快速排序法

1 从数列中挑出一个元素,称为 “基准”(pivot)
2 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
3 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。


function quickSort(arr){
    if (!(arr instanceof Array)) return [];
    // console.log('arr',arr);
    let length = arr.length;
    // 当数组存在元素并且多于一个元素时执行
    if (length > 1) {
        let pivotIndex = Math.floor(length/2);
        let pivot = arr.splice(pivotIndex,1)[0]; 
        let left = [];
        let right = [];
        // 然后开始遍历数组,将小于基准的元素放入左边,大于基准的放入右边
        for(let i = 0;i < length; i++){
            // console.log(arr,'arr[i]',arr[i],pivot);
            if(arr[i] !== undefined){
                if (arr[i] < pivot) {
                    left.push(arr[i]);
                 
                } else{
                   
                    right.push(arr[i]);
                }
            }
          
        }
        // 用递归不断重复这个过程
        return quickSort(left).concat([pivot],quickSort(right));
    }else{
        return arr;
    }
}

console.log('last',quickSort([5,12,55,9,33,4,7]));//4,5,7,9,12,33,55
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值