实现原理
先进行两两排序(将每个元素想象成大小为1的数组),再四四归并… 直到最后。
效率分析
时间复杂度依然是Nlog,只不过不需要递归减少压栈的操作。
代码实现
func sort(a []int) {
aux = make([]int, len(a))
N := len(a)
for sz := 1; sz < N; sz = sz + sz {
for lo := 0; lo < N - sz; lo += sz {
merge(a, lo, lo + sz - 1, min(lo + sz + sz -1, N - 1))
}
}
}