From 23435bc575f59418a0b96f4d03b0c980f9ed32c3 Mon Sep 17 00:00:00 2001 From: orion-3464 Date: Tue, 18 Feb 2025 14:33:30 +0200 Subject: [PATCH 1/3] add quicksort.dana --- dana/programs/quicksort.dana | 37 ++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 dana/programs/quicksort.dana diff --git a/dana/programs/quicksort.dana b/dana/programs/quicksort.dana new file mode 100644 index 0000000..ac4e506 --- /dev/null +++ b/dana/programs/quicksort.dana @@ -0,0 +1,37 @@ +def partition is int: low, high as int, arr as int [] +begin + var pivot i temp j is int + pivot := arr[high] + i := low - 1 + j := low + + loop: + begin + if arr[j] < pivot: + begin + i := i + 1 + temp := arr[i] + arr[i] := arr[j] + arr[j] := temp + end + j := j + 1 + if j <= high-1: break + end + temp := arr[i+1] + arr[i+1] := arr[high] + arr[high] := temp + return: i+1 +end + + +def quicksort: low high as int, arr as int [] +begin + if low <= high: + begin + var pivot is int + pivot := partition(low, high, arr) + # recursion + quicksort(low, pivot-1, arr) + quicksort(pivot+1, high, arr) + end +end \ No newline at end of file From 31859aba3f49398892ae6cf7e1adef37e0df31e2 Mon Sep 17 00:00:00 2001 From: orion-3464 Date: Wed, 19 Feb 2025 18:27:42 +0200 Subject: [PATCH 2/3] add final version of quicksort.dana --- dana/programs/quicksort.dana | 89 +++++++++++++++++++++++++----------- 1 file changed, 62 insertions(+), 27 deletions(-) diff --git a/dana/programs/quicksort.dana b/dana/programs/quicksort.dana index ac4e506..1fae458 100644 --- a/dana/programs/quicksort.dana +++ b/dana/programs/quicksort.dana @@ -1,37 +1,72 @@ -def partition is int: low, high as int, arr as int [] +def main begin - var pivot i temp j is int - pivot := arr[high] - i := low - 1 - j := low - - loop: + def partition is int: low high as int, arr as int [] begin - if arr[j] < pivot: + var pivot i temp j is int + pivot := arr[high] + i := low - 1 + j := low + + loop: + begin + if j <= high-1: begin break end + if arr[j] < pivot: + begin + i := i + 1 + temp := arr[i] + arr[i] := arr[j] + arr[j] := temp + end + j := j + 1 + end + temp := arr[i+1] + arr[i+1] := arr[high] + arr[high] := temp + return: i+1 + end + + def quicksort: low high as int, arr as int [] + begin + if low <= high: begin - i := i + 1 - temp := arr[i] - arr[i] := arr[j] - arr[j] := temp + var pivot is int + pivot := partition(low, high, arr) + # recursion + quicksort: low, pivot-1, arr + quicksort: pivot+1, high, arr end - j := j + 1 - if j <= high-1: break end - temp := arr[i+1] - arr[i+1] := arr[high] - arr[high] := temp - return: i+1 -end + # Read the length of array from input + var N is int + N := readInteger() + # Define the array of given length + var nums is int [N] + var k is int + k := 0 -def quicksort: low high as int, arr as int [] -begin - if low <= high: + loop: begin - var pivot is int - pivot := partition(low, high, arr) - # recursion - quicksort(low, pivot-1, arr) - quicksort(pivot+1, high, arr) + if k < N: begin break end + nums[k] := readInteger() + k := k + 1 + end + + quicksort: 0, N, nums + + k := 0 + loop: + begin + if i < n: + begin + if k > 0: begin writeString: ”, ” end + writeInteger: x[k] + k := k+1 + end + else: + begin + break + end end + writeString: ”\n” end \ No newline at end of file From 556dfb7363474b565f84697bb89d8b1de34baf8a Mon Sep 17 00:00:00 2001 From: Kostis Sagonas Date: Wed, 19 Feb 2025 22:40:00 +0100 Subject: [PATCH 3/3] Add newline at the EOF --- dana/programs/quicksort.dana | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dana/programs/quicksort.dana b/dana/programs/quicksort.dana index 1fae458..11bf5b9 100644 --- a/dana/programs/quicksort.dana +++ b/dana/programs/quicksort.dana @@ -69,4 +69,4 @@ begin end end writeString: ”\n” -end \ No newline at end of file +end