Zig Tutorial #4 — sort

Robert Guiscard
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);
}

--

--