jumpforth/test/merge-sort.4th

23 lines
571 B
Forth

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-DESCENDING
"After: " TYPE SHOW-LIST