这一系列博客的特点就是——给出每趟排序的结果
本来想着好好写一下过程,弄个图片什么的,不过觉得网上的解析太多了,都比较好,所以这些博客就算是对自己的总结吧。
#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; }
运行结果
时间: 2024-10-09 06:10:11