40 lines
877 B
Plaintext
40 lines
877 B
Plaintext
#import "modules/std.sx";
|
|
|
|
quickSort :: (items: []$T) {
|
|
partition :: (items: []T, lo: s32, hi: s32) -> s32 {
|
|
pivot := items[hi];
|
|
i := lo - 1;
|
|
j := lo;
|
|
while j < hi {
|
|
if items[j] < pivot {
|
|
i += 1;
|
|
tmp := items[i];
|
|
items[i] = items[j];
|
|
items[j] = tmp;
|
|
}
|
|
j += 1;
|
|
}
|
|
i += 1;
|
|
tmp := items[i];
|
|
items[i] = items[hi];
|
|
items[hi] = tmp;
|
|
i;
|
|
}
|
|
|
|
sort :: (items: []T, lo: s32, hi: s32) {
|
|
if lo < hi {
|
|
pi := partition(items, lo, hi);
|
|
sort(items, lo, pi - 1);
|
|
sort(items, pi + 1, hi);
|
|
}
|
|
}
|
|
|
|
sort(items, 0, items.len - 1);
|
|
}
|
|
|
|
main :: () {
|
|
arr : []s32 = .[333, 2, 3, 5, 2, 2, 3, 4, 5, 6, 6, 1];
|
|
quickSort(arr);
|
|
print("{}\n", arr);
|
|
}
|