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