下面是 输出排序过程的结果 的源代码(附结果图):
#include<stdio.h> #include<stdlib.h> #define N 18//数组的长度 int count = 0; void print(int *a, int len) { for (int i = 0; i < len; i++) printf("%d ", a[i]); printf("\n"); } void Merge(int *a,int low,int mid,int high,int *b) { int i = low; int j = mid + 1; int k = low; while (i <= mid &&j <= high) { if (a[i] <= a[j]) b[k] = a[i++]; else b[k] = a[j++]; k++; } while (i <= mid) b[k++] = a[i++]; while (j <= high) b[k++] = a[j++]; printf("第%d趟:\n ", count++); for (int i = low; i <= high; i++) printf("%d ",a[i]); printf("\n"); } void M_Sort(int *a,int low,int high,int *res) { int mid; int temp[N]; if (high == low) { res[low] = a[low]; } else { mid = (high + low) / 2; M_Sort(a,low,mid,temp); M_Sort(a,mid+1,high,temp); Merge(temp,low,mid,high,res); } } void Merge_Sort(int *a,int len) { M_Sort(a,0,len-1,a); } int main(void) { int a[] = { 2,3,4,5,6,7,8,9,6,5,6,7,7,9,4,2,3,0 }; int len = sizeof(a) / sizeof(int); printf("原始数据:\n"); print(a, len); Merge_Sort(a,len); printf("排序后的数据:\n"); print(a,len); return 0; }