Skip to content

Commit 1f1cfa8

Browse files
Merge pull request #717 from bohemian997/master
Added "Merge Sort Algorithm" in Golang in Go Directory
2 parents 4612ae7 + d2e93fb commit 1f1cfa8

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

Go/merge_sort.go

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
// Merge Sort in Golang
2+
package main
3+
4+
import (
5+
"fmt"
6+
"math/rand"
7+
"time"
8+
)
9+
10+
func main() {
11+
12+
slice := generateSlice(20)
13+
fmt.Println("\n--- Unsorted --- \n\n", slice)
14+
fmt.Println("\n--- Sorted ---\n\n", mergeSort(slice))
15+
}
16+
17+
// Generates a slice of size, size filled with random numbers
18+
func generateSlice(size int) []int {
19+
20+
slice := make([]int, size, size)
21+
rand.Seed(time.Now().UnixNano())
22+
for i := 0; i < size; i++ {
23+
slice[i] = rand.Intn(999) - rand.Intn(999)
24+
}
25+
return slice
26+
}
27+
28+
func mergeSort(items []int) []int {
29+
var num = len(items)
30+
31+
if num == 1 {
32+
return items
33+
}
34+
35+
middle := int(num / 2)
36+
var (
37+
left = make([]int, middle)
38+
right = make([]int, num-middle)
39+
)
40+
for i := 0; i < num; i++ {
41+
if i < middle {
42+
left[i] = items[i]
43+
} else {
44+
right[i-middle] = items[i]
45+
}
46+
}
47+
48+
return merge(mergeSort(left), mergeSort(right))
49+
}
50+
51+
func merge(left, right []int) (result []int) {
52+
result = make([]int, len(left)+len(right))
53+
54+
i := 0
55+
for len(left) > 0 && len(right) > 0 {
56+
if left[0] < right[0] {
57+
result[i] = left[0]
58+
left = left[1:]
59+
} else {
60+
result[i] = right[0]
61+
right = right[1:]
62+
}
63+
i++
64+
}
65+
66+
for j := 0; j < len(left); j++ {
67+
result[i] = left[j]
68+
i++
69+
}
70+
for j := 0; j < len(right); j++ {
71+
result[i] = right[j]
72+
i++
73+
}
74+
75+
return
76+
}

0 commit comments

Comments
 (0)