归并排序算法
- 格式:doc
- 大小:24.00 KB
- 文档页数:2
#include
using namespace std;
#define MAX 100
typedef struct node{
int r[MAX+1];
int length;
}seqlist,*pseqlist;
pseqlist Init_seqlist()
{
pseqlist pl;
pl=(pseqlist)malloc(sizeof(seqlist));
if(pl)
pl->length=0;
return pl;
}
void Merge(int r[],int rf[],int u,int v,int t)
{
int i,j,k;
for(i=u,j=v+1,k=u;i<=v&&j<=t;k++)
{
if(r[i]<=r[j])
rf[k]=r[i++];
else
rf[k]=r[j++];
}
while(i<=v)
rf[k++]=r[i++];
while(j<=t)
rf[k++]=r[j++];
}
void Msort(int p1[],int p2[],int n,int l)
{
int i=1,j;
while(i+2*l-1<=n)//i+2*l-1表示每次归并的尾元素下标
{
Merge(p1,p2,i,i+l-1,i+2*l-1);
i=i+2*l;
}
if(i<=n)
Merge(p1,p2,i,i+l-1,n);
else
for(j=l;j<=n;j++)
p1[j]=p2[j];
}
void Mergesort(pseqlist s,int n)
{
int i,l=1,rf[100];//l表示要归并的两相邻有序序列中元素的个数之和
while(l<=n)
{
Msort(s->r,rf,s->length,l);
l=l*2;
Msort(rf,s->r,s->length,l);
l=l*2;
}
for(i=1;i<=n;i++)
cout<
cout<
int main()
{
pseqlist pl;
int n,i;
pl=Init_seqlist();
cout<<"输入关键字个数n=";
cin>>n;
pl->length=n;
cout<<"输入一组关键字: ";
for(i=1;i<=n;i++)
cin>>pl->r[i];
cout<<"输出归并排序序列:"<
return 0;
}