pdq
Unstable in-place sort. n best case, n*log(n) worst case and average case. log(n) memory (no allocator required).
Sorts in ascending order with respect to the given lessThan function.
Function parameters
Parameters
- T:type
- items:[]T
- context:anytype
- lessThanFn:fn (context: @TypeOf(context), lhs: T, rhs: T) bool
Unstable in-place sort.
Functions
- pdq
- Unstable in-place sort.
- pdqContext
- Unstable in-place sort.
Source
Implementation
pub fn pdq(
comptime T: type,
items: []T,
context: anytype,
comptime lessThanFn: fn (context: @TypeOf(context), lhs: T, rhs: T) bool,
) void {
const Context = struct {
items: []T,
sub_ctx: @TypeOf(context),
pub fn lessThan(ctx: @This(), a: usize, b: usize) bool {
return lessThanFn(ctx.sub_ctx, ctx.items[a], ctx.items[b]);
}
pub fn swap(ctx: @This(), a: usize, b: usize) void {
return mem.swap(T, &ctx.items[a], &ctx.items[b]);
}
};
pdqContext(0, items.len, Context{ .items = items, .sub_ctx = context });
}