merge sort added

pull/2/head
0xAX 10 years ago
parent 6354c6d109
commit 175b499c1f

1
.gitignore vendored

@ -25,3 +25,4 @@ _testmain.go
sorting/bubble_sort
sorting/selection_sort
sorting/merge_sort

@ -19,6 +19,7 @@ alghoritms
* bubble sort
* selection sort
* merge sort
todo
------

@ -0,0 +1,52 @@
package main
/*
* Merge sort - http://en.wikipedia.org/wiki/Merge_sort
*/
import "fmt"
import "github.com/IoSync/go-alghoritms"
func Merge(left, right []int) []int {
result := make([]int, 0, len(left) + len(right))
for len(left) > 0 || len(right) > 0 {
if len(left) == 0 {
return append(result, right...)
}
if len(right) == 0 {
return append(result, left...)
}
if left[0] <= right[0] {
result = append(result, left[0])
left = left[1:]
} else {
result = append(result, right[0])
right = right[1:]
}
}
return result
}
func MergeSort(arr []int) []int {
if len(arr) <= 1 {
return arr
}
middle := len(arr) / 2
left := MergeSort(arr[:middle])
right := MergeSort(arr[middle:])
return Merge(left, right)
}
func main() {
arr := utils.RandArray(10)
fmt.Println("Initial array is:", arr)
fmt.Println("")
fmt.Println("Sorted array: ", MergeSort(arr))
}
Loading…
Cancel
Save