[Back to SORTING SWAG index] [Back to Main SWAG index] [Original]
{...This is as generic a QuickSort as I currently use:
}
{$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,P-,R-,S-,T-,V-}
{$M 60000,0,0}
Program QuickSortDemo;
Uses
Crt;
Const
coMaxItem = 30000;
Type
Item = Word;
arItem = Array[1..coMaxItem] of Item;
(***** QuickSort routine. *)
(* *)
Procedure QuickSort({update} Var arData : arItem;
{input } woLeft,
woRight : Word);
Var
Pivot,
TempItem : Item;
woIndex1,
woIndex2 : Word;
begin
woIndex1 := woLeft;
woIndex2 := woRight;
Pivot := arData[(woLeft + woRight) div 2];
Repeat
While (arData[woIndex1] < Pivot) do
inc(woIndex1);
While (Pivot < arData[woIndex2]) do
dec(woIndex2);
if (woIndex1 <= woIndex2) then
begin
TempItem := arData[woIndex1];
arData[woIndex1] := arData[woIndex2];
arData[woIndex2] := TempItem;
inc(woIndex1);
dec(woIndex2)
end
Until (woIndex1 > woIndex2);
if (woLeft < woIndex2) then
QuickSort(arData, woLeft, woIndex2);
if (woIndex1 < woRight) then
QuickSort(arData, woIndex1, woRight)
end; (* QuickSort. *)
Var
woIndex : Word;
Buffer : arItem;
begin
Write('Creating ', coMaxItem, ' random numbers... ');
For woIndex := 1 to coMaxItem do
Buffer[woIndex] := random(65535);
Writeln('Finished!');
Write('Sorting ', coMaxItem, ' random numbers... ');
QuickSort(Buffer, 1, coMaxItem);
Writeln('Finished!');
Writeln;
Writeln('Press the <ENTER> key to display all ', coMaxItem,
' sorted numbers...');
readln;
For woIndex := 1 to coMaxItem do
Write(Buffer[woIndex]:8)
end.
[Back to SORTING SWAG index] [Back to Main SWAG index] [Original]