歸併排序
① 先解決小規模的問題。
② 將問題分解,將陣列分為兩個小的陣列。
③ 遞迴的解各子問題,將函式中分解的兩個小的陣列再進行以上兩個步驟,最後都化為小規模問題。
④ 將各子問題的解進行合併最終得到原問題的解。
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...