summaryrefslogtreecommitdiff
path: root/examples/algorithms
diff options
context:
space:
mode:
authorZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-11 21:13:29 +0000
committerZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-11 21:13:50 +0000
commit36938b584ea2d096d97a124b70da51f685850ff7 (patch)
tree768c132d8a661c74f36683005548cf6afb163714 /examples/algorithms
parentff32e7b6b99dd9b17b4c581e6c48308128f46c52 (diff)
A few examples, some more will be added soon.
Diffstat (limited to 'examples/algorithms')
-rw-r--r--examples/algorithms/quicksort.zc57
1 files changed, 57 insertions, 0 deletions
diff --git a/examples/algorithms/quicksort.zc b/examples/algorithms/quicksort.zc
new file mode 100644
index 0000000..adef038
--- /dev/null
+++ b/examples/algorithms/quicksort.zc
@@ -0,0 +1,57 @@
+
+import "std.zc"
+
+fn swap(arr: int*, i: isize, j: isize) {
+ var temp = arr[i];
+ arr[i] = arr[j];
+ arr[j] = temp;
+}
+
+fn partition(arr: int*, low: isize, high: isize) -> isize {
+ var pivot = arr[high];
+ var i = low - 1;
+
+ for j in low..high {
+ if arr[j] < pivot {
+ i++;
+ swap(arr, i, j);
+ }
+ }
+ swap(arr, i + 1, high);
+ return i + 1;
+}
+
+fn quicksort(arr: int*, low: isize, high: isize) {
+ if low < high {
+ var pi = partition(arr, low, high);
+ quicksort(arr, low, pi - 1);
+ quicksort(arr, pi + 1, high);
+ }
+}
+
+fn print_array(arr: int*, size: isize) {
+ "["..;
+ for i in 0..size {
+ "{arr[i]}"..;
+ if i < size - 1 { ", "..; }
+ }
+ "]";
+}
+
+fn main() {
+ var v = Vec<int>::new();
+ defer v.free();
+
+ var values = [10, 7, 8, 9, 1, 5, 3, 12, 2, 6];
+ for i in 0..10 {
+ v.push(values[i]);
+ }
+
+ "Original: "..;
+ print_array(v.data, (int)v.len);
+
+ quicksort(v.data, 0, (isize)v.len - 1);
+
+ "Sorted: "..;
+ print_array(v.data, (int)v.len);
+}