這一系列博客的特點就是——給出每趟排序的結果
本來想着好好寫一下過程,弄個圖片什麼的,不過覺得網上的解析太多了,都比較好,所以這些博客就算是對自己的總結吧。
#include <stdio.h> #include <limits.h> #include <malloc.h> int a[10]={2,8,5,7,4,3,1,9,6,10}; void merge(int *m, int x, int y, int z) { int b1,b2,i,j,k; b1=y-x+1; b2=z-y; int *tm1=(int*)malloc(sizeof(int)*(b1+1)); int *tm2=(int*)malloc(sizeof(int)*(b2+1)); for(i=0;i<b1;i++) tm1[i]=m[i+x]; for(j=0;j<b2;j++) tm2[j]=m[j+y+1]; tm1[i]=tm2[j]=INT_MAX; for(k=x,i=0,j=0;k<=z;k++) { if (tm1[i]<tm2[j]) { m[k]=tm1[i]; i++; } else { m[k]=tm2[j]; j++; } } free(tm1); free(tm2); } void MergeSort(int *m,int n1, int n2) { if(n1<n2) { int n=(n1+n2)/2; MergeSort(m,n1,n); MergeSort(m,n+1,n2); merge(m,n1,n,n2); for(int t=0;t<10;t++) printf("%d ",m[t]); printf("\n"); } } int main() { int i; for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n排序後\n"); MergeSort(a,0,9); printf("\n最終結果\n"); for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); return 0; }
運行結果