JS实现各种排序

90 阅读1分钟

1.快速排序

这次好好整理了一下,记录下来。
我了解到的一种是比较好理解的算法,见代码:

function quicksort(arr){
    //异常处理
    if(arr.length<=1) return arr;
    var jizhun=Math.floor(arr.length/2);
    var one=arr.splice(jizhun,1)[0];
    var left=[];
    var right=[];
    for(var i=0;i<arr.length;i++){
        if(arr[i]>one){
            right.push(arr[i]);
        }
        if(arr[i]<=one){
            left.push(arr[i]);
        }
    }
    
    return [...quicksort(left),one,...quicksort(right)];
}
arr=[1,5,4,2,5,6,8,5,4,1267,4];
console.log(quicksort(arr)); 

第一种比较好理解,不做赘述。 下面说一下第二种: 核心公式:

function quicksort(arr, start, end) {
    if(start>=end) return arr;
    var i = start;
    var j = end;
    var baseline = Math.floor((start+end) / 2);
    while (i <= j) {
        while (arr[j] > arr[baseline]) {
            j--;
        }
        while (arr[i] < arr[baseline]){
            i++;
        } 
        if (i <= j) {
            temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
            i++;
            j--;
        }

    }
    return i;
}
function test(arr, start, end) {
    if(arr.length<1){
        return arr;
    }
    var index = quicksort(arr, start, end);
    if (start < index - 1) {
        quicksort(arr,start, index - 1);
    }
    if (end > index - 1) {
        quicksort(arr,index, end);
    }
    return arr;
}
arr = [8, 7, 6, 5, 4, 3, 2, 1]
console.log(test(arr, 0, 7));

未完待续...