js中实现快速排序

快排的实现利用了二分查找法;

二分法是通过与中间值进行比较,每次缩小一半的区域;

快速类似于二分法,每次都在数组中选择一个基数,每一轮结束后,比该基数小的都位于该基数的左边,比该基数大的位于右边。然后再分别在左边的数组里,里面选一个基点和基点值,右边选择基点和基点值,这里就是用递归。

function quickSort(arr) {
    if (arr.length<=1){
        return arr;
    }
    var baseIndex= Math.floor(arr.length/2);//向下取整,选取基准点
    var base=arr.splice(baseIndex,1)[0];//取出基准点的值,
    // splice 通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。
    // slice方法返回一个新的数组对象,不会更改原数组
//这里不能直接base=arr[baseIndex],因为base代表的每次都删除的那个数
    var left=[];
    var right=[];
    for (var i = 0;i<arr.length;i++){
    // 这里的length是变化的,因为splice会改变原数组。
        if (arr[i]<base){
            left.push(arr[i]);//比基准点小的放在左边数组,
        }
    }else{
        right.push(arr[i]);//比基准点大的放在右边数组,
    }
    return quickSort(left).concat([base],quickSort(right));

 

posted @ 2021-02-23 13:40  香香香。。。。香菜  阅读(570)  评论(0编辑  收藏  举报