Skip to content

Commit b4cb0f8

Browse files
authored
[Dana] Add quicksort (#48)
1 parent 789bb14 commit b4cb0f8

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

dana/programs/quicksort.dana

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
def main
2+
begin
3+
def partition is int: low high as int, arr as int []
4+
begin
5+
var pivot i temp j is int
6+
pivot := arr[high]
7+
i := low - 1
8+
j := low
9+
10+
loop:
11+
begin
12+
if j <= high-1: begin break end
13+
if arr[j] < pivot:
14+
begin
15+
i := i + 1
16+
temp := arr[i]
17+
arr[i] := arr[j]
18+
arr[j] := temp
19+
end
20+
j := j + 1
21+
end
22+
temp := arr[i+1]
23+
arr[i+1] := arr[high]
24+
arr[high] := temp
25+
return: i+1
26+
end
27+
28+
def quicksort: low high as int, arr as int []
29+
begin
30+
if low <= high:
31+
begin
32+
var pivot is int
33+
pivot := partition(low, high, arr)
34+
# recursion
35+
quicksort: low, pivot-1, arr
36+
quicksort: pivot+1, high, arr
37+
end
38+
end
39+
40+
# Read the length of array from input
41+
var N is int
42+
N := readInteger()
43+
# Define the array of given length
44+
var nums is int [N]
45+
var k is int
46+
k := 0
47+
48+
loop:
49+
begin
50+
if k < N: begin break end
51+
nums[k] := readInteger()
52+
k := k + 1
53+
end
54+
55+
quicksort: 0, N, nums
56+
57+
k := 0
58+
loop:
59+
begin
60+
if i < n:
61+
begin
62+
if k > 0: begin writeString: ”, ” end
63+
writeInteger: x[k]
64+
k := k+1
65+
end
66+
else:
67+
begin
68+
break
69+
end
70+
end
71+
writeString: ”\n”
72+
end

0 commit comments

Comments
 (0)