The predicate to sort by.
Partition 1-dimensional slice at nth
import mir.ndslice.slice: sliced; size_t nth = 2; auto x = [3, 1, 5, 2, 0].sliced; x.partitionAt(nth); assert(x[nth] == 2);
Partition 2-dimensional slice
import mir.ndslice.slice: sliced; size_t nth = 4; auto x = [3, 1, 5, 2, 0, 7].sliced(3, 2); x.partitionAt(nth); assert(x[2, 0] == 5);
Can supply alternate ordering function
import mir.ndslice.slice: sliced; size_t nth = 2; auto x = [3, 1, 5, 2, 0].sliced; x.partitionAt!("a > b")(nth); assert(x[nth] == 2);
Partitions slice, such that all elements e1 from slice[0] to slice[nth] satisfy !less(slice[nth], e1), and all elements e2 from slice[nth] to slice[slice.length] satisfy !less(e2, slice[nth]). This effectively reorders slice such that slice[nth] refers to the element that would fall there if the range were fully sorted. Performs an expected O(slice.length) evaluations of less and swap, with a worst case of O(slice.length^^2).
This function implements the Fast, Deterministic Selection algorithm that is implemented in the `topN` function in D's standard library (as of version 2.092.0).