49 lines
710 B
Go
49 lines
710 B
Go
package _2_sorts
|
|
|
|
func MergeSort(arr []int) {
|
|
arrLen := len(arr)
|
|
if arrLen <= 1 {
|
|
return
|
|
}
|
|
|
|
mergeSort(arr, 0, arrLen-1)
|
|
}
|
|
|
|
func mergeSort(arr []int, start, end int) {
|
|
if start >= end {
|
|
return
|
|
}
|
|
|
|
mid := (start + end) / 2
|
|
mergeSort(arr, start, mid)
|
|
mergeSort(arr, mid+1, end)
|
|
merge(arr, start, mid, end)
|
|
}
|
|
|
|
func merge(arr []int, start, mid, end int) {
|
|
tmpArr := make([]int, end-start+1)
|
|
|
|
i := start
|
|
j := mid + 1
|
|
k := 0
|
|
for ; i <= mid && j <= end; k++ {
|
|
if arr[i] < arr[j] {
|
|
tmpArr[k] = arr[i]
|
|
i++
|
|
} else {
|
|
tmpArr[k] = arr[j]
|
|
j++
|
|
}
|
|
}
|
|
|
|
for ; i <= mid; i++ {
|
|
tmpArr[k] = arr[i]
|
|
k++
|
|
}
|
|
for ; j <= end; j++ {
|
|
tmpArr[k] = arr[j]
|
|
k++
|
|
}
|
|
copy(arr[start:end+1], tmpArr)
|
|
}
|