归并排序
来源:互联网 发布:木村拓哉女儿 知乎 编辑:程序博客网 时间:2024/05/22 21:10
代码如下:
#include <stdio.h>#include <stdlib.h>#include <time.h>#define N 50000void merge(int [],int,int,int);//归并排序数组合并函数声明void mergesort(int [],int,int);//归并排序数组排序函数声明//主函数int main(){ int i,a1[N]; double t1,t2,t3,t4; for(i=0;i<N;i++) { a1[i]=rand()%N; } //归并排序N个随机数字所用的时间 t2=clock(); mergesort(a1,0,N-1); t2=clock()-t2; /*排好序的结果*/ for(i=0;i<N-1;i++) { printf("%4d\n",a1[i]); } printf("\n归并排序%d个随机数字所用时间为:%f毫秒\n",N,(double)t2); getch(); return 1;}//归并排序//归并排序合并数组函数的具体实现void merge(int a[],int low,int middle,int high){ int h,i,j,k; int b[N]; h=low; i=low; j=middle+1; while(h<=middle&&j<=high) { if(a[h]<=a[j]) { b[i]=a[h]; h++; } else { b[i]=a[j]; j++; } i++; } if(h>middle) for(k=j;k<=high;k++) { b[i]=a[k]; i++; } else { for(k=h;k<=middle;k++) { b[i]=a[k]; i++; } } for(k=low;k<=high;k++) { a[k]=b[k]; }}//归并排序函数的具体实现void mergesort(int a[],int low,int high){ int middle; if(low<high) { middle=(low+high)/2; mergesort(a,low,middle); mergesort(a,middle+1,high); merge(a,low,middle,high); }}
完。
0 0