//Time Complexity O(n log n)
procedure QuickSort(var Arr: TArray<Integer>;
L, R: Integer);
var
I, J, Pivot, Tmp: Integer;
begin
I := L;
J := R;
Pivot := Arr[(L + R) div 2];
while I <= J do
begin
while Arr[I] < Pivot do
Inc(I);
while Arr[J] > Pivot do
Dec(J);
if I <= J then
begin
Tmp := Arr[I];
Arr[I] := Arr[J];
Arr[J] := Tmp;
Inc(I);
Dec(J);
end;
end;
if L < J then
QuickSort(Arr, L, J);
if I < R then
QuickSort(Arr, I, R);
end;
var
Items: TArray<Integer>;
Number: Integer;
begin
Items := [4, 1, 5, 3, 2];
QuickSort(Items, 0, High(Items));
//items is [1, 2, 3, 4, 5]
for Number in Items do
Write(Number, ' ');
WriteLn;
end.