参考其他大神实现 :
https://blog.youkuaiyun.com/qq_36520153/article/details/82894216
我的实现
package main
import "fmt"
func main(){
s1 := []int{2,6,3,7,8}
sort1(s1)
fmt.Println(s1)
}
func sort1(slice []int){
if len(slice) < 2 && slice == nil {
return
}
subSort(0,4,slice)
}
func merge(slice1 []int, l ,r ,mid int){
help:= make([]int ,0)
p1:= l
p2: mid+1
//保证不越界
for p2<=r && p1 <=mid {
if slice1[p1] <slice[p2]{
help = append(help , slice1[p1])
p1++
}else{
help = append(help ,slice1[p2])
p2++
}
}
//p2到达临界点 p2 > r,此时p1<=mid.
for p1<=mid{
help = append (help ,slice1[p1])
p1++
}
//p1到达临界点p2未到达 则把p2后面的复制给辅助切片
for p2< = r{
help = append (help ,slice1[p2])
p2++
}
}
func subSort(left,right int ,slice []int){
if left == right {
return
}
mid := (left+right)/2
subSort(left,mid,slice)
subSort(mid+1,right,slice)
merge(slice,left,right,mid)
}