Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 83 additions & 0 deletions dana/programs/mergesort.dana
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
def merge: arr as int [], left as int, mid as int, right as int
var n1 n2 i j k is int
n1 := mid - left + 1
n2 := right - mid

var L is int [n1]
var R is int [n2]

i := 0
loop:
if i < n1:
L[i] := arr[left + i]
i := i + 1
else: break

j := 0
loop:
if j < n2:
R[j] := arr[mid + 1 + j]
j := j + 1
else: break

i := 0
j := 0
k := left

loop:
if i < n1 and j < n2:
if L[i] <= R[j]:
arr[k] := L[i]
i := i + 1
else:
arr[k] := R[j]
j := j + 1
k := k + 1
else: break

loop:
if i < n1:
arr[k] := L[i]
i := i + 1
k := k + 1
else: break

loop:
if j < n2:
arr[k] := R[j]
j := j + 1
k := k + 1
else: break

def merge_sort: arr as int [], left as int, right as int
if left < right:
var mid is int
mid := (left + right) / 2
merge_sort: arr, left, mid
merge_sort: arr, mid + 1, right
merge: arr, left, mid, right

def main
var n is int
n := readInteger()

var arr is int [n]
var i is int

i := 0
loop:
if i < n:
arr[i] := readInteger()
i := i + 1
else: break

merge_sort: arr, 0, n-1

i := 0
loop:
if i < n:
writeInteger: arr[i]
writeString: " "
i := i + 1
else: break
writeString: "\n"
2 changes: 2 additions & 0 deletions dana/programs/mergesort.input
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
5
12 3 7 1 9
1 change: 1 addition & 0 deletions dana/programs/mergesort.result
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1 3 7 9 12