归并排序

来源:互联网 发布:遗传算法实现代码 编辑:程序博客网 时间:2024/06/07 06:30

归并排序

归并排序算是对分治算法的一种运用。
时间复杂度为O(nlogn)也是一种比较快速的排序算法

首先将代排序的数递归分化成多个小区间,那么我们可以默认,只有一个数的区间是已经排好序的
然后进行合并。

递归分化的代码:
void Mergesort(int l,int r){if(l>=r)return;int mid=(l+r)>>1;      //分治过程,当只有一个数时可以默认为已经排序的状态Mergesort(l,mid);     //已经排序好的左区间Mergesort(mid+1,r);   //已经排序好的右区间Unite(l,mid,r);    //排序加合并 }

合并的时候相当于把两个有序的数组合并
那么合并的方法就是,每次取最小的两个比较,
小的那个记录下来,并且删去,继续比较
代码:
void Unite(int l,int mid,int r) //合并[l,mid],[mid+1,r]; {int tmp[20],t=0;int ll=l,rl=mid+1,mm=mid;while(ll<=mm&&rl<=r)    //两段取最小的比较,小的输出并删去 {if(m[ll]<m[rl])tmp[t++]=m[ll++];elsetmp[t++]=m[rl++];}while(ll<=mm)tmp[t++]=m[ll++];while(rl<=r)tmp[t++]=m[rl++];for(int i=0;i<t;i++)   //将排序好的赋值给区间  [l,r] m[l+i]=tmp[i];}





原创粉丝点击