演算法實驗 分治法實現合併排序

2021-10-02 12:10:59 字數 1267 閱讀 3933

歸併排序

① 先解決小規模的問題。

② 將問題分解,將陣列分為兩個小的陣列。

③ 遞迴的解各子問題,將函式中分解的兩個小的陣列再進行以上兩個步驟,最後都化為小規模問題。

④ 將各子問題的解進行合併最終得到原問題的解。

void

merge

(int a,

int b,

int l,

int r)

else}if

(i>mid)

else

}將分開的兩個子陣列進行合併,即將兩個已排好序的子陣列按大小順序合併到乙個陣列裡面

void

merge_sort

(int a,

int b,

int l,

int r)

for(

int i=l;i<=r;i++)}

//歸併排序陣列

#include

#include

#include

using namespace std;

void

merge

(int a,

int b,

int l,

int r)

else}if

(i>mid)

else

}void

merge_sort

(int a,

int b,

int l,

int r)

for(

int i=l;i<=r;i++)}

intmain()

// coutlarge_integer time,time0,time1,time2;

queryperformancefrequency

(&time)

;queryperformancecounter

(&time0)

;merge_sort

(a,b,

0,n-1)

;queryperformancecounter

(&time1)

; out<<

"時間為:"

<<

1000.0

*(time1.quadpart-time0.quadpart)

/time.quadpart<<

"ms"

int j=

0;j)return0;

}

分治法 合併排序

合併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用 分治法 divide and conquer 的乙個非常典型的應用。合併排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。將已有序的子串行...

分治法 合併排序

排序演算法是對一組數進行順序排序或者逆序排序,而合併排序就是排序演算法的一種。合併排序用到了分治策略實現對元素進行排序。合併排序的基本思想 把待排序的n個元素分解成n組,也就是每組乙個元素 之後對分好的組進行兩兩合併 無配對的則不操作 以此類推。以序列為例,排序過程如下 合併排序又叫做2 路歸併排序...

基礎演算法 合併排序(分治法)

基礎演算法 合併排序演算法 分治法 的宗旨是將問題 分解 處理 歸併 將書中的偽 翻譯為c c 語言實現,大致可用兩個函式來解決問題,第乙個函式實現 治 也就是分解問題,處理問題 的步驟,另乙個函式通 過遞迴實現 分 合 的操作。實現 分 治 的函式實現如下 void merge int parra...