diff --git a/misc/gnome_sort.t b/misc/gnome_sort.t new file mode 100644 index 0000000..d4e7e85 --- /dev/null +++ b/misc/gnome_sort.t @@ -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