35 lines
741 B
Perl
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
|