慈善医疗阳光救助工程:修改归并排序的程序

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/05 07:24:53
帮忙改一下#include"stdio.h"
#define MAXSIZE 50
typedef int keytype;
typedef int elemtype;
typedef struct
{
keytype key;
elemtype otheritem;
}recdtype;
recdtype r[MAXSIZE];
void Merge(recdtype r[],recdtype r1[],int s,int m,int n)
{
int i=s,j=m+1,k=s;
while(i<=m&&j<=n)
{if(r[i].key<=r[j].key)
{
r1[k]=r[i];
++i;
}
else
{
r1[k]=r[j];
++j;
}
++k;
}
while(i<=m)
{
r1[k]=r[i];
i++;
k++;
}
while(j<=n)
{
r1[k]=r[j];
j++;
k++;
}
}
void Mergepass(recdtype r[],recdtype r1[],int n,int len)
{
int i=1,j;
while(i+2*len-1<n)
{
Merge(r,r1,i,i+len,i+2*len-1);
i+=2*len;
}
if(i+len-1<n)
Merge(r,r1,i,i+len-1,n);
else
for(j=i;j<=n;j++)
r1[j]=r[j];
}
void MergeSort(recdtype r[],recdtype r1[],int n)
{
int len=1;
while(len <n)
{
Mergepass(r,r1,n,len);
len*=2;
Mergepass(r1,r,n,len);
len*=2;
}
}
int main()
{
int n=0;
recdtype r[MAXSIZE],r1[MAXSIZE];
printf("请输入归并排序元素的个数:\n");
scanf("%d",&n);
printf("执行归并排序:\n");
for(int i=0;i<n;i++)
scanf("%d",&r[i].key);
MergeSort(r,r1,n);
}