經典排序之歸併排序

2021-09-06 17:52:49 字數 863 閱讀 5858

歸併排序,其的基本思路就是將陣列分成二組a,b,如果這二組組內的資料都是有序的,那麼就可以很方便的將這二組資料進行排序。如何讓這二組組內資料有序了?

可以將a,b組各自再分成二組。依次類推,當分出來的小組只有乙個資料時,可以認為這個小組組內已經達到了有序,然後再合併相鄰的二個小組就可以了。這樣通過先遞迴的分解數列,再合併數列就完成了歸併排序。

#include #include 

/*歸併排序

mergesort

說明:mergesort需要借助乙個o(n)大小的空間儲存排序陣列,

*/void merge(int *a,int first,int mid,int last,int *p)

while(i<=mid)p[k++] = a[i++];

while(j<=last)p[k++] = a[j++];

for (int i = first; i <= last; i++)

}void mergesort(int *a,int first,int last,int *p)

}int main(int argc, char **argv)

;

intsize;

inti;

size = sizeof(a)/sizeof(int

);

int *p = (int*)malloc(sizeof(int)*(size+1

)); mergesort(a,

0,size-1

,p);

for(i = 0; i < size; i++)

printf("\n

");free(p);

return0;

}

經典排序之歸併排序

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

經典排序之歸併排序

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...

經典排序 歸併排序

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