資料結構 排序演算法之歸併排序

2021-08-19 08:59:40 字數 1120 閱讀 4586

基本思想:將待排序的元素序列分成兩個等長的子串行,再將子串行劃分子串行,直到子串行中只有乙個元素就不用在對子序列繼續進行劃分,將劃分的每個區塊,進行排序,然後再將其歸併到乙個序列中,直到將所有的子串行歸併完成之後,則這個序列就完成了排序。

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 如果我們將這個序列從中間附近分開,分成兩個子串行,想辦法讓這兩個子串行變得有序。然後再把兩個有序的子串行合併成乙個有序的子串行,那麼我們的排序不就完成了嗎?如...