-
Notifications
You must be signed in to change notification settings - Fork 32
/
Copy pathsorting_algorithm.nr
63 lines (53 loc) · 1.36 KB
/
sorting_algorithm.nr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
############ Sorting Algorithm ##############
By @VictorKariuki
https://github.com/VictorKariuki
#############################################
*/
slice = unda(arr,start, end) {
result = []
wakati (start < end) {
result = result + [arr[start]]
start = start + 1
}
rudisha result
}
merge = unda(left, right) {
result = []
lLen = left.idadi()
rLen = right.idadi()
l = 0
r = 0
wakati (l < lLen && r < rLen) {
kama (left[l] < right[r]) {
result = result + [left[l]]
l = l + 1
} sivyo {
result = result + [right[r]]
r = r + 1
}
}
andika(result)
}
mergeSort = unda(arr){
len = arr.idadi()
andika("arr is ", arr," of length ", len)
kama (len < 2) {
rudisha arr
}
andika("len is greater than or == to 2", len > 1)
mid = (len / 2)
andika("arr has a mid point of ", mid)
left = slice(arr, 0, mid)
right = slice(arr, mid, len)
andika("left slice is ", left)
andika("right slice is ", right)
sortedLeft = mergeSort(left)
sortedRight = mergeSort(right)
andika("sortedLeft is ", sortedLeft)
andika("sortedRight is ", sortedRight)
rudisha merge(sortedLeft, sortedRight)
}
arr = [6, 5, 3, 1, 8, 7, 2, 4]
sortedArray = mergeSort(arr)
andika(sortedArray)