Skip to content

Commit b8a036a

Browse files
authored
[Dana] Add mergesort (#67)
1 parent e46d0c7 commit b8a036a

File tree

3 files changed

+86
-0
lines changed

3 files changed

+86
-0
lines changed

dana/programs/mergesort.dana

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
def merge: arr as int [], left as int, mid as int, right as int
2+
var n1 n2 i j k is int
3+
n1 := mid - left + 1
4+
n2 := right - mid
5+
6+
var L is int [n1]
7+
var R is int [n2]
8+
9+
i := 0
10+
loop:
11+
if i < n1:
12+
L[i] := arr[left + i]
13+
i := i + 1
14+
else: break
15+
16+
j := 0
17+
loop:
18+
if j < n2:
19+
R[j] := arr[mid + 1 + j]
20+
j := j + 1
21+
else: break
22+
23+
i := 0
24+
j := 0
25+
k := left
26+
27+
loop:
28+
if i < n1 and j < n2:
29+
if L[i] <= R[j]:
30+
arr[k] := L[i]
31+
i := i + 1
32+
else:
33+
arr[k] := R[j]
34+
j := j + 1
35+
k := k + 1
36+
else: break
37+
38+
loop:
39+
if i < n1:
40+
arr[k] := L[i]
41+
i := i + 1
42+
k := k + 1
43+
else: break
44+
45+
loop:
46+
if j < n2:
47+
arr[k] := R[j]
48+
j := j + 1
49+
k := k + 1
50+
else: break
51+
52+
def merge_sort: arr as int [], left as int, right as int
53+
if left < right:
54+
var mid is int
55+
mid := (left + right) / 2
56+
merge_sort: arr, left, mid
57+
merge_sort: arr, mid + 1, right
58+
merge: arr, left, mid, right
59+
60+
def main
61+
var n is int
62+
n := readInteger()
63+
64+
var arr is int [n]
65+
var i is int
66+
67+
i := 0
68+
loop:
69+
if i < n:
70+
arr[i] := readInteger()
71+
i := i + 1
72+
else: break
73+
74+
merge_sort: arr, 0, n-1
75+
76+
i := 0
77+
loop:
78+
if i < n:
79+
writeInteger: arr[i]
80+
writeString: " "
81+
i := i + 1
82+
else: break
83+
writeString: "\n"

dana/programs/mergesort.input

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
5
2+
12 3 7 1 9

dana/programs/mergesort.result

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
1 3 7 9 12

0 commit comments

Comments
 (0)