六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 36|回复: 0

排序算法(不断完善)

[复制链接]

升级  66%

39

主题

39

主题

39

主题

秀才

Rank: 2

积分
149
 楼主| 发表于 2013-1-26 13:50:16 | 显示全部楼层 |阅读模式
归并与归并排序算法:
MergeAB(Item c[] ,int N,Item b[],int M){Int I,j,k;  For(i=0,j=0,k=0;k<N+M;k++){If(i==N){c[k]=b[j++];continue}If(j==M){c[k]=a[i++];continue}c[k]=a[i]>b[j]?a[i++]:b[j++];}原地归迸(开一个辅助数组,有一部分倒了序方便作哨兵):Item aux[maxN];Merge(Item a[],int l,int m,int r){Int I,j,k;For(i=m+1;i>l;i--)aux[i-1]=a[i-1];For(j=m;j<r;j++)aux[r+m-j]=a[j+1];//倒序For(k=l;k<=r;k++)   If(aux[j]<aux[i])a[k]=aux[j--];Else a[k]=aux[i++];}}归迸排序:Void mergesort(item a[],int l,int r){Int m=(r+1)/2;If(r<=1)return;Mergesort(a,l,m);Mergesort(a,m+1,r);Merge(a,l,m,r);}自底向上的归并排序:#define min(A,B)  (A<B)?A:BVoid mergesortBU(Item a[],int l,int r){Int i,m;For(m=1;m<=r-1;m=m+m)//m从一开始 ---宏观整合层        For(i=l;i<=r-m;i+=m+m)//I 从L开始----微观层            Merge(a,i,i+m-1,min(i+m+m-1,r));}  
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表