实现原理
创建一个适当大小的数组,然后将两个数组中的元素一个个从大到小依次放入其中。
效率分析
代码实现
var aux []int
func less(v, w int) bool {
return v < w
}
// 将 a[lo, mid] 和 a[mid+1, hi]进行归并
func merge(a []int, lo, mid, hi int) {
i, j := lo, mid + 1
// copy array
for k := lo; k <= hi; k++ {
aux[k] = a[k]
}
for k := lo; k <= hi; k++ {
if i > mid {
a[k] = aux[j]
j++
} else if j > hi {
a[k] = aux[i]
i++
} else if less(aux[j], aux[i]) {
a[k] = aux[j]
j++
} else {
a[k] = aux[i]
i++
}
}
}