歸併排序,其的基本思路就是將陣列分成二組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為例,以 的方式講解歸併排序的原理。從圖中可以看出,歸併排序是先將陣列進...