Zig Tutorial #4 — sort
1 min readMar 19, 2021
Zig provides basic sort facility. It is in-place sorting. Here is an exmple from zig source code:
fn cmpByValue(context: void, a: i32, b: i32) bool {
return std.sort.asc(i32)(context, a, b);
}pub fn main() anyerror!void {
var arr = [_]i32{ 5, 3, 1, 2, 4 };
std.sort.sort(i32, arr[0..], {}, cmpByValue);
}
This is quite straight forward and uses most of std library.
We can also sort ArrayList with Struct like this:
const Data = struct {
data: i32,
};fn cmpByData(context: void, a: Data, b: Data) bool {
if (a.data < b.data) {
return true;
} else {
return false;
}
}pub fn main() anyerror!void {
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
defer arena.deinit();
const allocator = &arena.allocator; const List = std.ArrayList(Data);
var list = List.init(allocator);
defer list.deinit(); list.append(Data{.data = 5}) catch unreachable;
list.append(Data{.data = 3}) catch unreachable;
list.append(Data{.data = 1}) catch unreachable;
list.append(Data{.data = 2}) catch unreachable;
list.append(Data{.data = 4}) catch unreachable; var x = list.toOwnedSlice();
std.sort.sort(Data, x, {}, cmpByData); for (x) |item| {
std.debug.warn("{},", .{item.data});
} allocator.free(x);
}