scratch/misc/gnome_sort.t
2025-01-17 13:43:38 -03:00

35 lines
741 B
Perl

! Gnome sort in T3X/0
use t3x: t;
use string: str;
use strfmt: fmt;
use io;
gnome_sort(arr, arrlen, cmpfn) do var i, tmp;
i := 0;
while (i < arrlen) do
ie (i = 0 \/ call cmpfn(arr[i], arr[i - 1])) do
i := i + 1; ! the gnome steps forward
end else do
! swap
tmp := arr[i];
arr[i] := arr[i-1];
arr[i-1] := tmp;
i := i - 1; ! the gnome steps back
end
end
return arr;
end
cmp_asc(prev, cur) return prev >= cur;
cmp_dec(prev, cur) return prev <= cur;
do var arr, arrlen, i, b::16;
arr := [(1333, 0, 47, 2, 124, 39, 2, 1, 5, 10)];
arrlen := 10;
arr := gnome_sort(arr, arrlen, @cmp_asc);
for (i=0, arrlen) do
io.writes(fmt.format(b, "%ud ", [(arr[i])]));
end
io.nl();
end