Files
zern/examples/quicksort.zr
2025-06-13 16:59:22 +02:00

36 lines
1.0 KiB
Plaintext

func quicksort[arr: Array] : I64
do_quicksort(arr, 0, Array.size(arr)-1)
return 0
func do_quicksort[arr: Array, low: I64, high: I64] : I64
if low < high
let i: I64 = partition(arr, low, high)
do_quicksort(arr, low, i - 1)
do_quicksort(arr, i + 1, high)
return 0
func partition[arr: Array, low: I64, high: I64] : I64
let pivot: I64 = Array.nth(arr, high)
let i: I64 = low - 1
for j in (low)..high
if Array.nth(arr, j) <= pivot
i = i + 1
let temp: I64 = Array.nth(arr, i)
Array.set(arr, i, Array.nth(arr, j))
Array.set(arr, j, temp)
let temp: I64 = Array.nth(arr, i + 1)
Array.set(arr, i + 1, Array.nth(arr, high))
Array.set(arr, high, temp)
return i + 1
func main[] : I64
let arr: Array = [340, 252, 352, 117, 650, 652, 322, 175, 714, 268, 725, 664]
for i in 0..Array.size(arr)
print_i64(Array.nth(arr, i))
print("------------")
quicksort(arr)
for i in 0..Array.size(arr)
print_i64(Array.nth(arr, i))