实现原理

采用分治思想,自顶向下不断对数组进行归并排序。

效率分析

对于长度为N的数组,需要比较NlogN次。

代码实现

  1. func sort(a []int) {
  2. aux = make([]int, len(a))
  3. _sort(a, 0, len(a) - 1)
  4. }
  5. func _sort(a []int, lo, hi int) {
  6. if hi <= lo {
  7. return
  8. }
  9. mid := lo + (hi - lo) / 2
  10. _sort(a, lo, mid)
  11. _sort(a, mid + 1, hi)
  12. merge(a, lo, mid, hi)
  13. }

优化方法

  1. 对小规模子数组使用插入排序

处理小规模的数组(长度小于15)时,使用插入排序。

  1. 测试数组是否已经有序

如果a[mid] 小于等于 a[mid+1] 就可以认为数组已经是有序的。