home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Big Blue Disk 19
/
bbd19.zip
/
--------.111
(
.txt
)
< prev
next >
Wrap
Turbo Pascal Chain module
|
1988-01-13
|
9KB
|
65 lines
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.