package main
import "fmt"
func main () {
numbers := []int{5,1,9,2,6,3,9,4,1,6,3,7}
res := mergeSort(numbers)
fmt.Println(res)
}
func mergeSort(arrs []int) []int {
n := len(arrs)
if n < 2 {
return arrs
}
mid := n / 2
left := arrs[:mid]
right := arrs[mid:]
return merge(mergeSort(left), mergeSort(right))
}
func merge(left []int, right []int) []int {
res := make([]int, 0)
L_left := len(left)
L_right := len(right)
i, j := 0, 0
for i < L_left && j < L_right {
if left[i] <= right[j] {
res = append(res, left[i])
i++
} else {
res = append(res, right[j])
j ++
}
}
if i < L_left {
res = append(res, left[i:]...)
}
if j < L_right {
res = append(res, right[j:]...)
}
return res
}