1.问题
二分归并排序:对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k
2.解析
二分归并排序是一种分治算法,其大体思想就是先将一个数组A不断通过二分拆解,直至不能拆解为止,然后将拆解出来的数两两组合排序合并,通过不断的循环最后得到一个排序好的数组。
所以总的来说,二分归并算法分为两步:
- 拆解:将整个数组通过二分的方式拆解出n/2个子数组。
- 归并:通过两两组合的方式把两个有序的子数组合并成一个更大的数组。依次循环直至归并完成。
以下为长度为8的A数组的二分归并排序举例:
3.设计
void Merge(int A[],int low, int mid, int high)
{
int x=low, y=low, z=mid+