Compares: Swaps: Assignments END OF DEMO. ! return.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. (---------------------------------------- '--------------------------------------- Right Pivot @Press Space to continue, ESC to quit, 0-9 to change speeds, or to scroll. 8PROGRAM Quick1( Input, Output ); { Quicksort program } CONST Size = 20; &TYPE List = ARRAY[1..Size] OF INTEGER; & L: List; { Array to be sorted } K: INTEGER; %PROCEDURE Swap( VAR X, Y : INTEGER ); VAR Temp:INTEGER; BEGIN Temp := X; X := Y; Y := Temp END; { Swap } PROCEDURE QSort( , Left, { Position of first element } + Right: { Position of last element } INTEGER ); Up, Down, Pivot: INTEGER; BEGIN " { Partition values } Up := Left; Down := Right; 9 Pivot := L[ (Left+Right) div 2 ]; { Set pivot value } REPEAT 6 WHILE L[Up] < Pivot DO { Scan forward } Up := Up+1; 7 WHILE Pivot < L[Down] DO { Scan backward } Down := Down-1; ? IF Up <= Down THEN { Swap & continue scans } BEGIN SWAP( L[Up], L[Down] ); Up := Up+1; Down := Down-1 END C UNTIL Up > Down; { until scan pointers cross } * { Sort each partition part } IF Left < Down 2 THEN QSort( Left, Down ); { Sort left part } IF Up < Right 2 THEN QSort( Up, Right ); { Sort right part } END; { QSort } !BEGIN { Main = QuickSortDemo } FOR K := 1 TO Size DO L[K] := TRUNC( RANDOM*900 ); QSort( 1, Size ); END. { QuickSortDemo } Bad variable number.