1. 程式人生 > >javascript歸併排序

javascript歸併排序

歸併排序:

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(Divide and Conquer)的一個非常典型的應用。歸併排序是一種穩定的排序方法。將已有序的子序列合併,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合併成一個有序表,稱為2-路歸併。

演算法描述和實現

具體演算法描述如下:

  • <1>.把長度為n的輸入序列分成兩個長度為n/2的子序列;
  • <2>.對這兩個子序列分別採用歸併排序;
  • <3>.將兩個排序好的子序列合併成一個最終的排序序列。

Javscript程式碼實現:

function mergeSort(arr){
    var len = arr.length;
    if(len<2){
        return arr;
    }
    var middle = Math.floor(len/2),
        left = arr.slice(0,middle),
        right = arr.slice(middle);
    return merge(mergeSort(left),mergeSort(right));
}
function merge(left,right){
    var result = [];
    while(left.length && right.length){
        if(left[0]<=right[0]{
            result.push(left.shift());
        }else{
            result.push(right.shift());
        }
    }
    while(left.length){
        result.push(left.shift());
    }
    while(right.length){
        result.push(right.shift());
    }
    return result;
}