經典排序之歸併排序

2021-09-08 09:21:10 字數 765 閱讀 1177

#include #include 

#include

#include /**

分治法排序:

1、分解。2、解決。3、合併。**/

void merge(int* a,int p,int q,int

r)else

}}void divide(int* a,int

length)

}int

main()

;

int length = sizeof(a)/sizeof(int

);

for(int i = 0; i < length; i++)

printf(

"%d

",a[i]);

printf("\n

");divide(a,length);

for(int i = 0; i < length; i++)

printf(

"%d

",a[i]);

printf("\n

");return0;

}

歸併排序想法很簡單,類似於分治法,先將乙個長長的序列分成若干子串行,然後合併,其核心就在於合併過程。演算法導論中這樣描述:想象一下桌子上放好了兩副排好順序的撲克,然後要把這兩副撲克合併成一幅排好順序的撲克,那麼就分別從兩副撲克的最上邊取最小的然後組成乙個新的序列。取完之後即完成了排序。歸併排序就是利用這個思想。

注意點:1、陣列模仿時,注意當陣列元素移動時,移動標誌位。

經典排序之歸併排序

package 歸併排序 歸併排序的思想 將陣列從中間分開,然後利用遞迴的方法將左右子串行均拆開 再借助乙個陣列歸併左右序列,排序是在歸併時進行的,最後將資料複製到原始陣列中 public class mergesort public static void main string args ret...

經典排序之歸併排序

歸併排序,其的基本思路就是將陣列分成二組a,b,如果這二組組內的資料都是有序的,那麼就可以很方便的將這二組資料進行排序。如何讓這二組組內資料有序了?可以將a,b組各自再分成二組。依次類推,當分出來的小組只有乙個資料時,可以認為這個小組組內已經達到了有序,然後再合併相鄰的二個小組就可以了。這樣通過先遞...

經典排序 歸併排序

歸併排序是利用歸併的思想實現的排序方法,該方法採用經典的分治策略 分治法將問題分成一些小的問題然後遞迴求解,而治的階段則是將分的階段得到的答案修補在一起,即分而治之 下面我們以待排序陣列 8,4,5,7,1,3,6,2,9,10為例,以 的方式講解歸併排序的原理。從圖中可以看出,歸併排序是先將陣列進...