归并与归并排序算法:
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));
}
本文详细介绍了归并排序算法的实现原理及其代码实现过程,包括基本的归并操作、递归式的归并排序以及自底向上的归并排序方法。
147

被折叠的 条评论
为什么被折叠?



