1 .问题
二分归并排序:对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k
2.解析
采用分而治之的方法,将数据进行两两分组,分到不能再划分为止,再依次进行排序后归并,直到最后归并完成。
3.设计
//二分归并查找
void Merge(int a[],int b[], int start, int mid, int end){
int left = start, right=mid+1, tmp = start;
while(left<mid+1 && right<end+1){
if(a[left] > a[right])
b[tmp++] = a[right++];
else
b[tmp++] = a[left++];
}
while(left < mid+1)
b[tmp++] = a[left++];
while(right < end+1)
b[tmp++] = a[right++];
for(left=start; left<=end; left++)
a[left] = b[left];
}
void MergeSort(int a[], int b[], int start, int end){
int mid;
if(start < end){
mid = start + (end-start) / 2;
MergeSort(a, b, start, mid);
MergeSort(a, b, mid+1, end);
Merge(a, b, start, mid, end);
}
}
4.分析
算法复杂度:O(n log n)
5.码源
源码地址: https://github.com/chaoxing0910/ex4