package algorithm
func merge(a []int, p int, q int, r int) {
L := make([]int, q-p+1)
R := make([]int, r-q)
for i := 0; i < len(L); i++ {
L[i] = a[i+p]
}
for i := 0; i < len(R); i++ {
R[i] = a[i+q+1]
}
L = append(L, 0x7FFFFFFF)
R = append(R, 0x7FFFFFFF)
i := 0
j := 0
for k := p; k <= r; k++ {
if L[i] < R[j] {
a[k] = L[i]
i++
} else {
a[k] = R[j]
j++
}
}
}
func MergeSort(a []int, p int, q int) {
if p < q {
m := (p + q) / 2
MergeSort(a, p, m)
MergeSort(a, m+1, q)
merge(a, p, m, q)
}
}