Skip to content

Instantly share code, notes, and snippets.

@Bablzz
Last active October 21, 2019 09:52
Show Gist options
  • Save Bablzz/e33ee3e149b31e71f5b1b9251ac9fc61 to your computer and use it in GitHub Desktop.
Save Bablzz/e33ee3e149b31e71f5b1b9251ac9fc61 to your computer and use it in GitHub Desktop.
Merge sort
/*
best time O(n log2 n)
worst time O(n log2 n)
*/
package main
import (
"fmt"
)
func main(){
arr := []int{2,1,4,7,6}
res := mergeSort(arr)
fmt.Println(res)
}
func sort(leftArr, rightArr []int) []int {
resultArr := make([]int, 0, len(leftArr) + len(rightArr))
for len(leftArr) > 0 || len(rightArr) > 0 {
if len(leftArr) == 0 {
return append(resultArr, rightArr...)
}
if len(rightArr) == 0 {
return append(resultArr, leftArr...)
}
if leftArr[0] <= rightArr[0] {
resultArr = append(resultArr, leftArr[0])
leftArr = leftArr[1:]
} else {
resultArr = append(resultArr, rightArr[0])
rightArr = rightArr[1:]
}
}
return resultArr
}
func mergeSort(a []int) []int {
if len(a) < 2 {
return a
}
mid := len(a) / 2
left := mergeSort(a[:mid])
right:= mergeSort(a[mid:])
return sort(left, right)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment