gnome sort in T3X/0
This commit is contained in:
parent
85e5323ee1
commit
4204e22d61
1 changed files with 35 additions and 0 deletions
35
misc/gnome_sort.t
Normal file
35
misc/gnome_sort.t
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
! Gnone 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
|
Loading…
Add table
Reference in a new issue