package main
import "fmt"
func __merge(arr[] int, l int, mid int,r int){
var aux[] int
for i:=l;i<=r;i++{
aux=append(aux,arr[i])
}
fmt.Println( aux[:])//观察归并的过程
i:=l
j:=mid+1
for k:=l;k<=r;k++{
if i>mid{
arr[k]=aux[j-l]
}else if j>r{
arr[k]=aux[i-l]
}else if aux[i-l]<aux[j-l]{
arr[k]=aux[i-l]
i++
}else{
arr[k]=aux[j-l]
j++
}
}
}
func __mergeSort(arr[] int,l int,r int){
if l>=r{
return
}
mid:=(l+r)/2
__mergeSort(arr,l,mid)
__mergeSort(arr,mid+1,r)
__merge(arr,l,mid,r)
}
func mergeSort(arr[] int)[] int{
size:=len(arr)
__mergeSort(arr,0,size-1)
return arr
}
func main(){
//fmt.Println("Yo Yo")
arr:=[...]int{10,90,80,7,6,5,4,3,2,1,23,2,5}
fmt.Println(mergeSort(arr[:]))
fmt.Println(len(arr))//切片的大小
}
终端输出结果:
[10 90]
[80 7]
[10 90 7 80]
[6 5]
[5 6 4]
[7 10 80 90 4 5 5]
[3 2]
[2 3 1]
[23 2]
[2 23 5]
[1 2 2 2 5 23]
[4 5 5 7 7 7 7 1 2 2 2 5 5]
[1 2 2 2 4 5 5 5 5 5 5 5 5]
13