{...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 key to display all ', coMaxItem, ' sorted numbers...'); readln; For woIndex := 1 to coMaxItem do Write(Buffer[woIndex]:8) end.