1 let partition<T> (slice : MutSlice<T> 2 l : i32 3 h : i32) where T : Comparable = 4 let pivot = slice[l] 5 let mut i = l - 1 6 let mut j = h + 1 7 8 repeat 9 repeat 10 i += 1 11 until slice[i] >= pivot 12 13 repeat 14 j -= 1 15 until slice[j] <= pivot 16 17 if i >= j then return j 18 19 let t = slice[i] 20 slice[i] = slice[j] 21 slice[j] = t 22 23 def quicksort<T> (slice : MutSlice<T> 24 l : i32 25 h : i32) : Unit where T : Comparable = 26 if l >= 0 && h >= 0 && l < h then 27 let pivot = partition slice l h 28 quicksort slice l pivot 29 quicksort slice (pivot + 1) h 30