基本思想:將待排序的元素序列分成兩個等長的子串行,再將子串行劃分子串行,直到子串行中只有乙個元素就不用在對子序列繼續進行劃分,將劃分的每個區塊,進行排序,然後再將其歸併到乙個序列中,直到將所有的子串行歸併完成之後,則這個序列就完成了排序。
1、基本思想如下所示:
經過上面的劃分,從而可以看出經過劃分與歸併,使得元素就有序。
但是要使得兩個區間的元素能歸併到乙個區間中,如果只是將乙個元素搬移到另乙個區間,勢必會造成資料溢位的情況,因此,借助輔助空間,完成每一次的排序即可。
**如下所示:;
void _megresort(int *array, int left, int right, int* tmp);
void megresort(int *array, int size)
void _megre(int *array, int left,int mid, int right, int* tmp)
else
}//出來之後,如果哪個陣列不為空,即將其元素直接搬移下來
while (index1 < mid)
while (index2 < right)
//加空間中的元素直接拷貝下來
memcpy(array+left, tmp+left, (right - left)*sizeof(int));
}void _megresort(int *array, int left,int right,int* tmp)
}
2、方法二,非遞迴
**如下所示:
void megresortnor(int
*array, int
size)
gap *=
2; }
delete tmp;
}
有關歸併排序,就這麼多了,希望大家一起學習!!!
只有不停的奔跑,才能不停留在原地!!!
資料結構 排序演算法之歸併排序
演算法思想 歸併排序是利用歸併的思想實現的排序方法,該演算法採用 分而治之 的思想將問題分成一些小的問題然後遞迴實現,最後合而為之。實現 遞迴實現 void merge int arr,const int left,const int mid,const int right,int temp whi...
資料結構之排序 歸併排序
四 歸併排序 歸併 把若干個有序的數列,合成乙個有序的數列 如二路歸併 void merge int d1,int len1,int d2,int len2,int tmp while i len1 tmp k d1 i while j len2 tmp k d2 j 1,二路歸併排序 迭代法 把待...
資料結構 排序之歸併排序
歸併,即 遞迴合併 q 我們排序的目的是什麼?a 讓無序的序列變得有序。比如說,下面有乙個序列 排序前排序後 7654321 1234567 如果我們將這個序列從中間附近分開,分成兩個子串行,想辦法讓這兩個子串行變得有序。然後再把兩個有序的子串行合併成乙個有序的子串行,那麼我們的排序不就完成了嗎?如...