1. 问题
二分归并排序:对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k
2. 解析
二分归并排序的原理是将n个元素分为n/2个组,在组内两两排序,然后两组两组排序,成为n/4组,再次组内排序,依此类推。
3. 设计
[核心伪代码]
4. int merge(int a[],int low,int mid,int high){
5. int j,k,h;
6. j=low;
7. h=mid+1;
8. k=low;
9. while(j<=mid&&h<=high){//将两端数据比较,放进辅助数组中
10. if(a[j]<a[h]){
11. b[k++]=a[j++];
12. }
13. else {
14. b[k++]=a[h++];
15. }
16. }
17. //将剩余数据放入辅助数组中
18. while(j<=mid){
19. b[k++]=a[j++];
20. }
21. while(h<=high){
22. b[k++]=a[h++];
23. }
24. for(k=low;k<=high;k++){//将辅助数组数据复制到对应原数组位置上
25. a[k]=b[k];