排序法系列之四 合併排序法

2021-06-05 01:42:03 字數 804 閱讀 9779

分治策略:

將原問題劃分為n個規模較小而結構與原問題相似的的子問題,遞迴地解決這些子問題,然後再合併這些結果,就得到原問題的解。

分支策略在每層遞迴上都實現以下三個步驟:

分解:將原問題劃分為多個子問題。

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

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

合併排序完全依照了上述模式:

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

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

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

時間複雜度是o(nlgn)

c++實現**如下:

#includeusing namespace std;

void merge(int *a,int p,int q,int r)

,r[1000]=;

len1=q-p+1;

len2=r-q;

int i,k,j;

for(i=0;ifor(i=0;il[len1]=1000000;

r[len2]=1000000;

i=0;j=0;

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

else

}}void mergesort(int *a,int p,int r)

}int main()

; mergesort(a,0,19);

for(int i=0;i<20;i++)

return 0;

}

排序演算法系列之合併排序

歸併排序 merge sort,合併排序 是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。歸併操作 merge 指的是將兩個已經排序的序列合併成乙個序列的操作,歸併排序演算法依賴歸併操作。歸併操作的過程如下 申請空間,使其大...

排序演算法系列之歸併排序

public class mergesort if index1 middle while index2 high else while index1 middle 將temp low high 序列複製到原序列 system.arraycopy temp,low,array,low,high 1 ...

排序法系列 快速排序法

快速排序法是對氣泡排序法的一種改進。他的基本思想是通過一趟排序把資料分割成獨立的兩部分,其中一部分的所有資料都比另一部分要小,以達到整個資料的排序。首先選取乙個資料為基準x通常選取第乙個資料。設定兩個變數i,j開始排序的時候i 0 j n 1 這裡n為資料的個數 從j開始搜尋,即從後往前搜尋,找到小...