c语言版数据结构归并排序.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
归并排序 详细设计 #include stdio.h #include stdlib.h #include time.h #define Max_Size 500 typedef int KeyType; typedef int OtherType; typedef struct { KeyType key; OtherType other_data; }RecordType; void Merge(RecordType r1[], int low, int mid, int high, RecordType r2[]) /* 已知 r1[low..mid] 和 r1[mid+1..high] 分别按关键字有序排列, 将它们合并成一个有序序列,存放在 r2[low..high] */ { int j,k; for(j=mid+1,k=low;low=mid j=high;++k)// {if(r1[low].key=r1[j].key) r2[k]=r1[low++]; int j,k; for(j=mid+1,k=low;low=mid j=high;++k)// { if(r1[low].key=r1[j].key) r2[k]=r1[low++]; else r2[k]=r1[j++]; } while(low=mid) // 将剩余的 ri[low..mid] r2[k++]=r1[low++]; while(j=high) r2[k++]=r1[j++];// 将剩余的 ri[j..mid] } /* Merge */ 将 ri 中的纪律由小到大的并入 复制到 r2 中 复制到 r2 中 r2 中 void MSort(RecordType r1[], int low, int high, RecordType r3[]) /* r1[low..high] 经过排序后放在 r3[low..high] 中, r2[low..high] 为辅助空间 */ { int mid; RecordType r4[500]; // 开设用于存放归并排序中间结果的辅助空间 if(low==high) r3[low]=r1[low]; else { mid=(low+high)/2;// 将 r1[low...high] 平 均 分 为 r1[low..mid] 和 r1[mid+1..high] MSort(r1,low,mid,r4);// 递归将 r1[low..mid] 归并为有序的 r3[low..mid] MSort(r1,mid+1,high,r4);// 递 归 将 r1[mid+1..high] 归 并 为 有 序 的 r3[mid+1..high] Merge(r4,low,mid,high,r3);// 递归将 r4[low..mid] 和 r4[mid+1..high] 归并为有 序的 r3[low..high] } } /* MSort */ void main() { int i; RecordType r[Max_Size]; int len; printf( 请输入待排序记录的长度 (500):); scanf(%d,len); srand((unsigned)time(NULL)); for(i=1;i=len;i++) r[i].key =rand(); printf(\n 待排序记录 :\n); for(i=1;i=len;i++) printf(%6d ,r[i].key); printf(\n); MSort(r,1,len,r); printf(\n 排序后的记录 :\n); for(i=1;i=len;i++) printf(%6d ,r[i].key); printf(\n); 测试结果 E “C:\Users\l\Deslctop燉垢结构课程设计\归井\Debug\归并.exe? | 何| 请输入待排序记$ 待排序记录: 3705 24963 14861 25212 | 10103 11183 艮的长度(500):30 19452 24870 13703 16576 30248 23162 32667 19025 21400 20998 21561 1483 14979 9098 22078 31683 11756 12467 I 26978 17145 23466 8764 18712 10308 排序后的记录: 1483 3705 8764 9098 10103 10308 11183 11756 12467 13703 14861 14979 16576 17145 18712 19025 19452 20998 21400 21561 22078 23162 23466 2

文档评论(0)

xiaozu + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档