为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

归并排序

2017-09-26 3页 doc 14KB 23阅读

用户头像

is_003124

暂无简介

举报
归并排序归并排序 #include #include typedef int InfoType; #define n 10 //假设的文件长度,即待排序的记录数目 typedef int KeyType; //假设的关键字类型 typedef struct { //记录类型 KeyType key; //关键字项 InfoType otherinfo; //其它数据项,类型InfoType依赖于具体应用而定义 } RecType; typedef RecType SeqList[n+1]; //SeqList为顺序...
归并排序
归并排序 #include #include typedef int InfoType; #define n 10 //假设的文件长度,即待排序的记录数目 typedef int KeyType; //假设的关键字类型 typedef struct { //记录类型 KeyType key; //关键字项 InfoType otherinfo; //其它数据项,类型InfoType依赖于具体应用而定义 } RecType; typedef RecType SeqList[n+1]; //SeqList为顺序表类型,表中第0个单元一般用作哨兵 void Merge(SeqList R,int low,int m,int high); void MergePass(SeqList R,int length); void main() { void MergeSort(SeqList R); int i; SeqList R; printf("请输入欲排序的数:"); for (i=1;i<=n;i++) scanf("%d",&R[i].key); printf("排序前:"); for (i=1;i<=n;i++) printf("%d ",R[i].key); printf("\n"); MergeSort(R); printf("排序后:"); for (i=1;i<=n;i++) printf("%d ",R[i].key); printf("\n"); } void Merge(SeqList R,int low,int m,int high) { //将两个有序的子文件R[low..m]和R[m+1..high]归并成一个有序的子文件R[low..high] int i=low,j=m+1,p=0; //置初始值 RecType *R1; //R1是局部向量,若p定义为此类型指针速度更快 R1=(RecType *)malloc((high-low+1)*sizeof(RecType)); if(!R1) //申请空间失败 { printf("Insufficient memory available!"); exit(0); } while(i<=m && j<=high) //两子文件非空时取其小者输出到R1[p]上 R1[p++]=(R[i].key<=R[j].key)?R[i++]:R[j++]; while(i<=m) //若第1个子文件非空,则复制剩余记录到R1中 R1[p++]=R[i++]; while(j<=high) //若第2个子文件非空,则复制剩余记录到R1中 R1[p++]=R[j++]; for(p=0,i=low;i<=high;p++,i++) R[i]=R1[p]; //归并完成后将结果复制回R[low..high] } void MergePass(SeqList R,int length) { //对R[1..n]做一趟归并排序 int i; for(i=1;i+2*length-1<=n;i=i+2*length) Merge(R,i,i+length-1,i+2*length-1); //归并长度为length的两个相邻的子文件 if(i+length-1
/
本文档为【归并排序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索