Download PDF
Transcript
Stack Usage and Parameter Passing 47 Binary Search We will now encode a more complicated algorithm, making the following assumptions: - an array contains objects consisting of 2 bytes. - the objects.in the array are in a particular order. - ORDERING compares 2 objects. : BINSEARCH. I INVARRAY: ROW INPUT: UPPERBOUND,OBJECT LOCAL: FOUND,LEFT,MIDDLE,RIGHT ( FOUND and LEFT are properly initialized: 0 ) UPPERBOUND TO RIGHT BEGIN RIGHT LEFT < > WHILE RIGHT LEFT + 2/ TO MIDDLE MIDDLE ROW OBJECT ORDERING DOCASE - I CASE MIDDLE LEFT = IF LEFT TO RIGHT ( not present) ELSE MIDDLE TO LEFT THEN ELSE o CASE I TO FOUND LEFT TO RIGHT ELSE I CASE MIDDLE TO RIGHT ENDCASE REPEAT FOUND IF OUTPUT:MIDDLE,FOUND ELSE OUTPUT:FOUND THEN; : BINSEARCH.2 ROT ROT 0 BEGIN 2DUP < > WHILE 2DUP + 2/ DUP 2* 5 PICK + @ 6 PICK ORDERING DOCASE - I CASE 2DUP = IF 2DROP DUP ELSE UNDER THEN ELSE o CASE UNDER UNDER UNDER UNDER I EXIT ELSE I CASE ROT DROP SWAP ENDCASE REPEAT 2DROP 2DROP 0 ; Note the differences in selfdocumenting power.