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