ForthNet@willett.UUCP (ForthNet articles from GEnie) (01/05/90)
Date: 12-23-89 (17:18) Number: 2705 (Echo)
To: ALL Refer#: NONE
From: STEVE PALINCSAR Read: (N/A)
Subj: SORTS and "I" - pt2 Status: PUBLIC MESSAGE
\ The SELECTION SORT (Algorithm S from Knuth Vol. 3)
.
\ ELEMENT is a string array. n ELEMENT should leave the
\ address of the nth string in the array on the stack
VARIABLE <smallest> \ This & <COUNTER> could
: smallest ( -- n ) <smallest> @ ; \ be VARs, too.
: smallest! ( n -- ) <smallest> ! ;
VARIABLE <COUNTER>
\ COUNTER contains the number of items to be sorted
: COUNTER ( -- n ) <COUNTER> @ ;
: {exchange} ( $addr1 $addr2 -- )
\ swap the counted strings at addr1 & addr2
( whatever code is neccessary to exchange counted strings )
( so whatever was at addr1 will be at addr2 and vice versa ) ;
: larger? ( element1 element2 -- f )
\ True if element1 should sort after element2
( whatever code necessary to compare two strings, leaving a )
( true flaag if first ELEMENT should be later in sequence )
( than the second string being compared ) ;
: SELECTION_SORT
COUNTER 0 DO
I smallest!
COUNTER I DO
smallest ELEMENT I ELEMENT larger?
IF I smallest! THEN
LOOP
smallest ELEMENT I ELEMENT {exchange}
LOOP ;
.
[cont'd]
-----
This message came from GEnie via willett through a semi-automated program.
Report problems to: 'uunet!willett!dwp' or 'willett!dwp@gateway.sei.cmu.edu'