func mergeSortGo(A []int, p, r int, m chan<- int) {
if r > p+1 {
q := (r + p) / 2
if r-p > 1000 {
a, b := make(chan int), make(chan int)
go mergeSortGo(A, p, q, a)
go mergeSortGo(A, q, r, b)
<-a
<-b
} else {
mergeSortGo(A, p, q, nil)
mergeSortGo(A, q, r, nil)
}
merge(A, p, q, r)
if m != nil {
m <- 0
}
}
}
// MergeSortGo O(nlgn)
func MergeSortGo(A []int, p, r int) {
if r > p+1 {
q := (r + p) / 2
if r-p > 1000 {
a, b := make(chan int), make(chan int)
go mergeSortGo(A, p, q, a)
go mergeSortGo(A, q, r, b)
<-a
<-b
} else {
MergeSortGo(A, p, q)
MergeSortGo(A, q, r)
}
merge(A, p, q, r)
}
}