看了關於歸併排序的這篇文章之後,寫個總結:
歸併排序是採用分治法的典型案例。
基本思路:
將陣列分成兩組 a,b,如果a,b組內的資料是有序的,那麼很容易將兩組陣列進行排序。
為了將a.b兩組資料有序,那麼將a,b再分成兩組。依次類推,當分出來的小組只有乙個資料時,
可以認為小組組內已經達到了有序,然後再合併相鄰兩個小組。
通過先遞迴的分解數列,再合併數列就完成了歸併排序。
**如下:
#include using namespace std;
//將有二個有序數列a[first...mid]和a[mid...last]合併。
void mergearray(int a, int first, int mid, int last, int temp)
// 再將其中某個未放置完畢的陣列直接放在臨時儲存陣列後面
while (i <= m)
temp[k++] = a[i++];
while (j <= n)
temp[k++] = a[j++];
// 再將臨時陣列的值放置在排序陣列中
for (i = 0; i < k; i++)
a[first + i] = temp[i];
}void mergesort(int a, int first, int last, int temp)
}bool mergesort(int a, int n)
int main()
; mergesort(b, 10);
for(int i=0; i<10; i++)
return 0;
}
歸併排序總結
歸併排序是利用分治思想,分開後一步一步歸併的過程。基本思路就是將陣列分成二組a,b,如果這二組組內的資料都是有序的,那麼就可以很方便的將這二組資料進行排序。可以將a,b組各自再分成二組。依次類推,當分出來的小組只有乙個資料時,可以認為這個小組組內已經達到了有序,然後再合併相鄰的二個小組就可以了。這樣...
歸併排序 總結
歸併排序的思想是把陣列不斷分割成兩半,然後不斷合併,具體就是先遞迴將陣列分成兩半分別排序,然後將結果歸併起來。分割的過程屬於遞迴行為,而合併過程用到了外排序的方法。外排序 用兩個指標指向兩個已排好序的陣列,申請乙個大小為n n為兩個陣列大小的和,n最大為原始陣列的大小 的陣列,把指標指向較小的數放進...
歸併排序總結
歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。過程描述 歸併...