1.问题
二分归并排序:对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k。
2.解析
采用分治法的思想,对待排序数组先分组再排序。
3.设计
Mergesort(A[0...n-1])
if n >1
copy A[0..⌊n/2 ⌋-1] to B[0..⌊n/2 ⌋-1]
copy A[ ⌊n/2 ⌋..n-1] to C[0.. ⌈n/2 ⌉-1]
Mergesort(B[0..⌊n/2 ⌋-1])
Mergesort(C[0..⌈n/2 ⌉-1])
Merge(B,C,A)
Merge(B[0..p-1],C[0..q-1],A[0..p+q-1])
i←0; j←0; k←0
while i< p and j< q do
if B[i]≤ C[j]
A[k] ← B[i];i←i+1
else A[k] ← C[j]; j←j+1
k←k+1
if i=p
copy C[j..q-1] to A[k..p+q-1]
else copy B[i..p -1] to A[k..p+q-1]
4.分析
5.源码
https://github.com/Hyacincy/-/blob/main/MergeSort.cpp