- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 1_东南营小学体育课教案水平一潘建元2(1)-体育1至2年级全一册教案.docx VIP
- 人教版2025秋小学数学三年级教学设计已知一个数的几倍是多少,求这个数.pdf VIP
- 人教版2025秋小学数学三年级教学设计求一个数的几倍是多少.pdf VIP
- 酒店前台UPSELL培训教学课件.pptx VIP
- 西门子变频器V20说明书SINAMICS-V20.pdf VIP
- 人教版2025秋小学数学三年级教学课件数量间的乘除关系求一个数的几倍是多少.pptx VIP
- 【水电站施组】引水式电站机电金属结构安装工程施工组织设计(最全).doc VIP
- 人教版2025秋小学数学三年级教学课件数量间的乘除关系已知一个数的几倍是多少,求这个数.pptx VIP
- MathCAD软件入门教程.pdf VIP
- 中药剂型PPT参考幻灯片.ppt VIP
文档评论(0)