javascript歸併排序
阿新 • • 發佈:2018-12-09
歸併排序:
歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(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; }