实现原理

创建一个适当大小的数组,然后将两个数组中的元素一个个从大到小依次放入其中。

效率分析

只需要遍历一遍,时间复杂度为N

代码实现

  1. var aux []int
  2. func less(v, w int) bool {
  3. return v < w
  4. }
  5. // 将 a[lo, mid] 和 a[mid+1, hi]进行归并
  6. func merge(a []int, lo, mid, hi int) {
  7. i, j := lo, mid + 1
  8. // copy array
  9. for k := lo; k <= hi; k++ {
  10. aux[k] = a[k]
  11. }
  12. for k := lo; k <= hi; k++ {
  13. if i > mid {
  14. a[k] = aux[j]
  15. j++
  16. } else if j > hi {
  17. a[k] = aux[i]
  18. i++
  19. } else if less(aux[j], aux[i]) {
  20. a[k] = aux[j]
  21. j++
  22. } else {
  23. a[k] = aux[i]
  24. i++
  25. }
  26. }
  27. }