流程分析
核心思路先将一个数据拆分成不可拆分的部分,然后在对小部分进行排序,小部分排完序号,在不断往上归并 例如,a,c,d 分别为排序好的小段,然后在针对a,c合并为e,在e和d进行合并
func megerSort(array []int, start int, end int) {
if end <= start {
return
}
mid := (end + start) / 2 // 获取中间树
megerSort(array, start, mid)
megerSort(array, mid+1, end)
megerSort_job(array, start, end, mid)
}
func megerSort_job(array []int, start int, end int, mid int) {
if start > mid {
return
}
length := end - start
tmp := make([]int, length+1)
i := 0
left := start
right := mid + 1
// start ~ mid 是有序的, mid+1~ end 是有序的
for left <= mid && right <= end {
if array[left] < array[right] {
tmp[i] = array[left]
left++
} else {
tmp[i] = array[right]
right++
}
i++
}
for left <= mid {
tmp[i] = array[left]
left++
i++
}
for right <= end {
tmp[i] = array[right]
right++
i++
}
for _, value := range tmp {
array[start] = value
start++
}
}