快速排序

基本过程

1. 选取数组中的一个元素作为基准(pivot)

2. 按照基准将数组分区,左区全部小于基准,右区全部大于基准,使用方法为原地置换(swap in place)

3. 对左右分区递归使用1和2步,直至左右分区只有一个或零个元素,排序完成

JavaScript实现

function fQuickSort(arr,low,high) {
    if(low > high){
        return;
    }
    if(low < 0){
        throw new Error('low should be great than zero')
    }
    if(high >= arr.length){
        throw new Error('high should be less than array\'s length')
    }
    var pivotIndex = fSwapInPlace(arr,low,high);
    fQuickSort(arr,low,pivotIndex-1);
    fQuickSort(arr,pivotIndex+1,high);
}

function fSwapInPlace(arr,low,high){
    var pivot = arr[low];
    while (low < high) {
        while(low < high && arr[high] > pivot){
            high--;
        }
        arr[low] = arr[high];
        while(low < high && arr[low] <= pivot){
            low++;
        }
        arr[high] = arr[low];
    }
    arr[low] = pivot;
  //stop at pivot place,low equals pivot index
    return low;
}

 JavaScript数组方式实现

function quickSort(arr){
    if(arr.length <= 1) return arr;
    var index = Math.floor(arr.length/2);
    var key = arr.splice(index,1)[0];
    var left = [],right = [];
    arr.forEach(function(v){
        v <= key ? left.push(v) : right.push(v);
    });
    return quickSort(left).concat([key],quickSort(right));
}

 

posted @ 2016-12-09 23:26  全玉  阅读(222)  评论(0编辑  收藏  举报