File tree Expand file tree Collapse file tree 1 file changed +76
-0
lines changed Expand file tree Collapse file tree 1 file changed +76
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments