Skip to content

Commit 6f1c341

Browse files
committed
Merge Sort Implementation
1 parent c4df036 commit 6f1c341

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed

sorting/merge_sort.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package sorting
2+
3+
func Merge(left []int, right []int) []int {
4+
5+
mergedArray := make([]int, 0, len(left)+len(right))
6+
7+
for len(left) > 0 || len(right) > 0 {
8+
if len(left) == 0 {
9+
return append(mergedArray, right...)
10+
}
11+
12+
if len(right) == 0 {
13+
return append(mergedArray, left...)
14+
}
15+
16+
if left[0] <= right[0] {
17+
mergedArray = append(mergedArray, left[0])
18+
left = left[1:]
19+
} else {
20+
mergedArray = append(mergedArray, right[0])
21+
right = right[1:]
22+
}
23+
}
24+
25+
return mergedArray
26+
}
27+
28+
func MergeSort(array []int) []int {
29+
30+
if len(array) <= 1 {
31+
return array
32+
}
33+
34+
middle := len(array) / 2
35+
36+
left := MergeSort(array[:middle])
37+
right := MergeSort(array[middle:])
38+
39+
return Merge(left, right)
40+
}

sorting/merge_sort_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package sorting
2+
3+
import (
4+
"fmt"
5+
"github.com/gowthamgts/go-algorithms"
6+
"testing"
7+
)
8+
9+
func TestMergeSort(t *testing.T) {
10+
randomArray := utils.GetRandomArray(10)
11+
fmt.Println("Sorting Random Array: ", randomArray)
12+
13+
sortedArray := MergeSort(randomArray)
14+
fmt.Println("Sorted Array: ", sortedArray)
15+
16+
properlySorted := utils.VerifySortedSet(sortedArray)
17+
18+
if properlySorted {
19+
fmt.Println("Sorting Verified!")
20+
} else {
21+
t.Error("Sorting Verification Failed")
22+
}
23+
}
24+

0 commit comments

Comments
 (0)