Compares: Swaps: Assignments END OF DEMO. ! sortdemo.chn %Enter a speed from 1 to 9 (1=slowest) %or 0 to single step thru program Press spacebar to continue... Press ESC to quit... ' Press 1-9 to change speeds, 0 to pause Bad variable number. (---------------------------------------- '--------------------------------------- StageNo StageOver Distance @Press Space to continue, ESC to quit, 0-9 to change speeds, or to scroll. PROCEDURE ShellSort( VAR L { List to be sorted } :List; & N { No. of items to be sorted } :INTEGER ); # Distance, StageNo, Loc : INTEGER; StageOver: BOOLEAN; %PROCEDURE Swap( VAR X, Y : INTEGER ); VAR Temp:INTEGER; BEGIN Temp := X; X := Y; Y := Temp BEGIN { ShellSort } Distance := N DIV 2; WHILE Distance > 0 DO BEGIN ( FOR StageNo := Distance TO N-1 DO BEGIN StageOver := False; Loc := StageNo+1; 5 WHILE (Loc-Distance>0) AND NOT StageOver DO BEGIN ) IF L[Loc] < L[Loc-Distance] 4 THEN Swap( L[Loc],L[Loc-Distance] ) ( ELSE StageOver := True; # Loc := Loc - Distance END END; Distance := Distance DIV 2 END END; { ShellSort }