歸併排序演算法及其JS實現

2022-06-16 07:36:14 字數 1227 閱讀 3671

歸併排序(merge-sort)是利用歸併的思想實現的排序方法,該演算法採用經典的分治(divide-and-conquer)策略(分治法將問題(divide)成一些小的問題然後遞迴求解,而治(conquer)的階段則將分的階段得到的各答案"修補"在一起,即分而治之)。

可以看到這種結構很像一棵完全二叉樹,本文的歸併排序我們採用遞迴去實現(也可採用迭代的方式去實現)。階段可以理解為就是遞迴拆分子序列的過程,對數列每次都進行切分,直到不能再切分 ,遞迴深度為log2n。

再來看看階段,我們需要將兩個已經有序的子串行合併成乙個有序序列,比如上圖中的最後一次合併,要將[4,5,7,8]和[1,2,3,6]兩個已經有序的子串行,合併為最終序列[1,2,3,4,5,6,7,8],來看下實現步驟。

js**實現

let dat=[5, 8, 10, 3, 2, 18, 17, 9];

function

merge(left,right)

else

}//left和right長度不一樣時,直接連線剩下的長的部分(本身有序)

return

temp.concat(left,right);

}function

mergesort(data)

var mid=math.floor(data.length/2);

var left=data.slice(0,mid);

var right=data.slice(mid);

return

merge(mergesort(left),mergesort(right));

}var sorteddata=mergesort(dat);

console.log(sorteddata);

Js 排序演算法 歸併排序

將兩個或兩個以上的有序序列合併成乙個有序序列過程 以二路歸併為例 穩定的排序方法 遞迴演算法 歸併排序 二路歸併 function msort record,newrecord,s,t else console.log record return newrecord function merge r...

歸併排序演算法實現

const int maxn 100 將陣列a的 l1,r1 與 l2,r2 區間合併為有序區間 此處l2即為r1 1 void merge int a,int l1,int r1,int l2,int r2 while i r1 temp index a i 將 l1,r1 剩餘元素加入temp ...

歸併排序演算法實現

關於歸併排序演算法的思想,網上有很多介紹,這裡不再解釋,這裡提供了乙個j a類,讀者可以把類潛入到自己的程式中,直接呼叫,免去了重新編寫歸併排序的過程。具體的j a 如下 1 import j a.util.2class mergesort 2021 public static void merge...