func MergeSort(a *[]int) []int{ tmp :=make([]int,len(*a)) Sort(a,0,len(*a)-1,tmp) return *a } //归并操作 func Mer(a *[]int,left int,mid int,right int,tmp []int) []int{ lx := left rx := mid + 1 i:=0 for{ if lx > mid || rx > right { break } if (*a)[lx] < (*a)[rx]{ tmp[i] = (*a)[lx] lx = lx + 1 }else{ tmp[i] = (*a)[rx] rx = rx + 1 } i ++ } for { if(lx > mid){ break } tmp[i] = (*a)[lx] i++;lx++ } for { if(rx > right){ break } tmp[i] = (*a)[rx] i++;rx++ } i = 0 for { if(left > right){ break } (*a)[left] = tmp[i] i++;left++ } return *a } //左右序列不断分化,直到左右只有一个数时为止 func Sort(a *[]int,left int,right int,tmp []int){ if left < right{ mid :=(left + right)/2 Sort(a,left,mid,tmp) Sort(a,mid+1,right,tmp) Mer(a,left,mid,right,tmp) } }