排序算法(不断完善)

归并与归并排序算法:

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:B
Void 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));
}
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值