AcWing 787. 归并排序-Golang/Go
原题链接
简单
作者:
ZWJ
,
2020-10-17 19:37:01
,
所有人可见
,
阅读 2
package main
import "fmt"
const MAX = 100000
var Arr [MAX+10]int
var Temp [MAX+10]int
func mergeSort(l, h int) {
// 边界条件
if l >= h {
return
}
// 中点分割
var m = (l + h) >> 1
// 将区域分为两个部分,分别递归执行
// [l, m], [m + 1, h]
mergeSort(l, m)
mergeSort(m + 1, h)
// Temp 数组专用指针
var k = 0
// 两边从头开始,i是左边一半的指针,j是右边一半的指针
i, j := l, m + 1
for i <= m && j <= h{
// 按大小顺序拷贝到临时变量区域
if Arr[i] <= Arr[j]{
Temp[k] = Arr[i]
i++
k++
}else{
Temp[k] = Arr[j]
j++
k++
}
}
// 剩余部分也要拷贝
for i <= m{
Temp[k] = Arr[i]
i++
k++
}
for j <= h{
Temp[k] = Arr[j]
j++
k++
}
// 从临时区拷贝出来
for i:= 0;i < k;i++{
Arr[l + i] = Temp[i]
}
}
func main(){
var x int
fmt.Scanf("%d", &x)
for i := 0; i < x; i++{
fmt.Scanf("%d", &Arr[i])
}
mergeSort(0, x - 1)
for i := 0;i < x; i++{
fmt.Printf("%d ", Arr[i])
}
}
### 边界条件直接背下来吧