使用Go对C++版的归并排序进行了重新实验,程序本身没有问题,但是在AcWing的787. 归并排序这道题目TLE了。
在实践时发现,在AcWing平台上使用Go的运行时间普遍非常的慢,目前还不知道原因是什么…
package main
import "fmt"
func merge_sort(q []int, l, r int) {
if l >= r {
return
}
mid := (l + r) >> 1
merge_sort(q, l, mid)
merge_sort(q, mid + 1, r)
i, j, k := l, mid + 1, 1
t := make([]int, r + 5)
for i <= mid && j <= r {
if q[i] >= q[j] {
t[k] = q[j]
k++
j++
} else {
t[k] = q[i]
k++
i++
}
}
for i <= mid {
t[k] = q[i]
k++
i++
}
for j <= r {
t[k] = q[j]
k++
j++
}
for i, j := 1, l; j <= r; i ++ {
q[j] = t[i]
j ++
}
}
func main() {
var n int
fmt.Scanf("%d", &n)
q := make([]int, n + 5)
for i := 1; i <= n; i ++ {
fmt.Scanf("%d", &q[i])
}
merge_sort(q, 1, n)
for i := 1; i <= n; i ++ {
fmt.Printf("%d ", q[i])
}
return
}