Skip to content

Commit 104149b

Browse files
Adding merge sort
1 parent 90b741c commit 104149b

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

Go/sorting/mergesort.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package sorting
2+
3+
func merge(arr []int, start, mid, end int) {
4+
ln, rn := mid-start+1, end-mid
5+
left := make([]int, ln)
6+
for i := 0; i < ln; i++ {
7+
left[i] = arr[start+i]
8+
}
9+
right := make([]int, rn)
10+
for i := 0; i < rn; i++ {
11+
right[i] = arr[mid+1+i]
12+
}
13+
list1Start, list2Start, k := 0, 0, start
14+
15+
for list1Start < ln && list2Start < rn {
16+
if left[list1Start] <= right[list2Start] {
17+
arr[k] = left[list1Start]
18+
list1Start++
19+
} else {
20+
arr[k] = right[list2Start]
21+
list2Start++
22+
}
23+
k++
24+
}
25+
26+
for list1Start < ln {
27+
arr[k] = left[list1Start]
28+
list1Start++
29+
k++
30+
}
31+
32+
for list2Start < rn {
33+
arr[k] = right[list2Start]
34+
list2Start++
35+
k++
36+
}
37+
}
38+
func mergeSort(arr []int, start, end int) {
39+
if start < end {
40+
mid := (start + end) / 2
41+
mergeSort(arr, start, mid)
42+
mergeSort(arr, mid+1, end)
43+
merge(arr, start, mid, end)
44+
}
45+
}

0 commit comments

Comments
 (0)