qey

Atitude is Everything.-- 关注C/C++,关注Linux(Unix) ,关注网络。 Better Late Than Never.
随笔 - 4, 文章 - 13, 评论 - 7, 引用 - 0
数据加载中……

数据结构复习--归并排序

个人学习笔记

归并排序算法:

例如有10个元素的排序码为:
(45,53,18,36,72,30,48,93,15,36)
归并排序过程如下图所示
(0)[45] [53] [18] [36] [72] [30] [48] [93] [15] [36]
(1)[45   53] [18  36] [30  72] [48  93] [15  36]
(2)[18  36  45  53] [30  48  72  93] [15  36]
(3)[18  30  36  45  48  53  72  93] [15  36]
(4)[15  18  30  36  36  45  48   53  72  93]


二路归并算法描述为:
void Twomerge(ElemType A[],ElemType R[],int s,int m,int t)
{
  
int i,j,k;
  i
=s;j=m+1;k=s;
  
while(i<=m&&j<=t)
    
if (A[i].stn<=A[j].stn)
       
{R[k]=A[i];i++;k++}
     
else
       
{R[k]=A[j];j++;k++}
  
while(i<=m)
   
{R[k]=A[i];i++;k++}  
  
while(j<=t)       
   
{R[k]=A[j];j++;k++}   
}

进行一趟归并的算法描述:
void MergePass(EelmType A[],int n,int len)
//把数组A[]中的每个长度为len的有序表两两归并
//到数组R[]中
{int p=0;
 
while (p+2*len-1<=n-1)
  
{  //两两归并长度均为len的有序表
   ToeMerge(A,R,p,p+len-1,p+2*len-1);
   p
+=2*len;
  }


 
if (p+len-1<n-1)//归并两个长度不等的有序表
  TwoMerge(A,R,p,p+len-1,n-1);
 
else
  
for(int i=p;i<=n-1;i++)
         R[i]
=A[i];//把剩余最后一个有序表复制到R中
}


二路归并排序的算法描述:


posted on 2006-04-07 23:32 无声无色 阅读(391) 评论(1)  编辑 收藏 引用

评论

# re: 数据结构复习--归并排序  回复  更多评论   

开始我的C++博客路
2006-04-07 23:36 | 无声无色

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理