合并排序
合并排序
简单介绍
合并排序使用分治策略来实现对n个算法的排序问题。
基本思想是:将待排序元素分成大小相同的两个子集合,分别对两个子集合进行论排序,最终将排好序的子集合并成排好序的集合。
该算法的时间复杂度是O(nlogn),由于排列问题的计算时间下界为nlogn,故合并排序是一个渐进最优算法。
实现思路
有两种实现方式:递归形式,非递归形式。
递归形式
void Merge(int *c, int *d, int l, int m, int r){
int i=l, j=m+1, k=l;
while((i<=m) && (j<=r)){
if(c[i] <= c[j])
d[k++] = c[i++];
else d[k++] = c[j++];
if(i>m)
for(int q=j; q<=r; q++)
d[k++] = c[q];
else if(j>r)
for(int q=i; q<=m; q++)
d[k++] = c[q];
}
}
int num[maxn], b[maxn];
void MergeSort(int *a, int left, int right){
if(left < right){
int i = (left+right)/2;
MergeSort(a, left, i);
MergeSort(a, i+1, right);
Merge(a, b, left, i, right);
for(int i=left, i<=right, i++)
a[i] = b[i];
}
}
非递归形式
#include
#include
#include
#include
#include
#include
#include
#include
#include
参考资料
《计算机算法设计与分析》