演算法之合併排序

2022-09-23 08:33:07 字數 1165 閱讀 1614

分治法,將原問題劃分成n個規模較小而結構與原問題相似的子問題;遞迴地解決這些子問題,然後再合併其結果,就能得到原問題的解。在每一層遞迴上都會有三個步驟:

分解:將原問題分解成一系列子問題;

解決:遞迴地解決各子問題,若子問題足夠小,則直接求解;

合併:將子問題的結果合併成原問題的解。

合併排序演算法完全依照了上述模式,直觀的操作如下:

分解:將n個元素分成各含n/2個元素的子串行

解決:用合併排序法將兩個子串行遞迴的排序

合併:合併兩個已排序的子串行以得到排序結果

對於子串行排序時,其長度為1時,遞迴結束。當個元素視為已排好序。

合併過程偽**:

merge(a, p, q, r)

n1=q-p+1

n2=r-q

l r =

for i=1->n1

l[i]=a[p+i-1]

for j=1>n2

r[j]=a[q+j]

l[n1+1]=infinity

r[n2+1]=infinity

for k=p->r

if l[i]<=r[i]

a[k]=l[i]

i++else

a[k]=r[j]

j++   

合併排序偽**:

mergesort(a, p, r)

if p < r

q = parseint((p+r)/2)

mergesort(a, p, q)

mergesort(a,q+1,r)

merge(a,p,q,r);   

js實現例項為:

var arr = [5,2,4,7,1,3,2,6];

function merge(arr, p, q, r)

for(var j = 1; j <= n2; j++)

l[n1 + 1] = infinity;

r[n2 + 1] = infinity;

i = j = 1;

for(var k = p; k <= r; k++) else

} return arr;} 

function mergesort(arr, p, r) } 

console.log(mergesort(arr, 0, arr.length-1));

演算法之合併排序

合併排序演算法是用分治策略實現對n個元素進行排序的演算法。基本思想 將待排序元素分成大小大致相同的兩個子集合,分別對兩個子集合進行排序,最終將排好序的子集合合併成要求的排好序的集合。歸併操作的工作原理如下 第一步 申請空間,使其大小為兩個已經 排序序列之和,該空間用來存放合併後的序列 第二步 設定兩...

分治演算法之合併排序

合併排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列 1 分解 將待排序元素分成大小大致相同的兩個子串行 2 治理 對兩個子串行進行合併排序 3 合併 將排好序的有序子串行進行合併,得到最終的有序序列 合...

演算法之合併排序 mergeSort

合併排序演算法在結構上是遞迴的,採用分治策略 就是將原有的問題劃分為 n 個規模較小但結構與原問題相似的子問題,遞迴地解決這些子問題,然後合併其結果,就得到原問題的解。合併排序的模式一般如下 1.分解 將 n 個元素分解為各含 n 2 個元素的兩個序列 2.解決 用分治排序法對兩個子串行遞迴地排序 ...