Algorithms / Sorting

//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 := [41532];

  QuickSort(Items, 0High(Items));
  //items is [1, 2, 3, 4, 5]

  for Number in Items do
    Write(Number, ' ');
  WriteLn;
end.