haihongyuan.com
海量文库 文档专家
全站搜索:
您现在的位置:首页 > 初中教育 > 初中英语初中英语

合并排序

发布时间:2013-10-20 08:04:40  

#include<stdio.h>
#include<string.h>
#define N 100
void merge(int arrayc[],int arrayd[],int l,int m,int r){ //定义合并函数,合并arrayc[1:m]和arrayc[m+1:r]到arrayd[l:r]
int i=l;
int j=m+1;
int k=l;
while((i<=m)&&(j<=r))
if(arrayc[i]<=arrayc[j])
arrayd[k++]=arrayc[i++];
else
arrayd[k++]=arrayc[j++];
if(i>m)
for(int q=j;q<=r;q++)
arrayd[k++]=arrayc[q];
else
for(int q=i;q<=m;q++)
arrayd[k++]=arrayc[q];
}

void mergepass(int arrayx[],int arrayy[],int s){ //合并大小为s的相邻子数组
int i=0;
while(i<=N-2*s){
merge(arrayx,arrayy,i,i+s-1,i+2*s-1);
i=i+2*s; //合并大小为s的相邻2段子数组
}
if((i+s)<N)
merge(arrayx,arrayy,i,i+s-1,N-1);
else
for(int j=i;j<N;j++)
arrayy[j]=arrayx[j]; //else复制到arrayy数组中

}
void mergesort(int array1[]){
int array2[N];
int s=1;
while(s<N){
mergepass(array1,array2,s);//合并到数组array2中
s+=s;
mergepass(array2,array1,s);//合并到数组array1中
s+=s;
}
}

int main(){ //定义main()主函数
int a;
printf("请输入要合并排序的数组大小:(数组最大上限100)\n");
scanf("%d",&a);
int array[N];
printf("Please input shorted array:\n");
for(int i=0;i<a;i++) //a控制数组大小
scanf("%d",&array[i]);
mergesort(array);
printf("合并排序后的数组为:\n");
for( i=N-a;i<N;i++)
printf(" %d",array[i]);
return 0;
}

上一篇:kennedy
下一篇:九年级英语试题
网站首页网站地图 站长统计
All rights reserved Powered by 海文库
copyright ©right 2010-2011。
文档资料库内容来自网络,如有侵犯请联系客服。zhit326@126.com