本文主要是介绍排序算法(不断完善),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
归并与归并排序算法:
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)); }
这篇关于排序算法(不断完善)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!