Golang排序算法
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)
}
}