jumpforth/test/merge-sort.4th

26 lines
608 B
Forth

"lib/merge-sort.4th" INCLUDED
ALSO MERGE-SORT
STRUCT
CELL% FIELD NODE>LINK
CELL% FIELD NODE>DATA
ENDSTRUCT NODE%
: COMPARE-NODES ( node1 node2 -- -1 | 0 | 1 )
>R NODE>DATA @ R> NODE>DATA @ - SIGNUM ;
: MAKE-LIST ( xu ... x1 u -- head )
0 >R RSP@ SWAP BEGIN ?DUP WHILE
1- -ROT NODE% %ALLOCATE DUP ROT ! DUP NODE>LINK -ROT NODE>DATA ! SWAP
REPEAT DROP R> ;
: SHOW-LIST ( head -- )
BEGIN ?DUP WHILE
DUP NODE>LINK @ SWAP NODE>DATA @ . SPACE
REPEAT EOL ;
7 5 3 6 8 9 4 2 4 9 MAKE-LIST
"Before: " TYPE DUP SHOW-LIST
' NODE>LINK ' COMPARE-NODES MERGE-SORT>
"After: " TYPE SHOW-LIST