分 治
func mergeSort(arr []int, i, j int) {
if i >= j {
return
}
mid := i + (j - i) >> 1
mergeSort(arr, i, mid)
mergeSort(arr, mid + 1, j)
merge(arr, i, mid, j)
}
func merge(arr []int, i, mid, j int) {
tmp := make([]int, j - i + 1)
left := i
right := mid + 1
k := 0
for left <= mid && right <= j {
if arr[left] < arr[right] {
tmp[k] = arr[left]
left++
} else {
tmp[k] = arr[right]
right++
}
k++
}
for ; left <= mid; left++ {
tmp[k] = arr[left]
k++
}
for ; right <= j; right++ {
tmp[k] = arr[right]
k++
}
for k := 0; k < len(tmp); k++ {
arr[i+k] = tmp[k]
}
}