Procedure QuickSort(numbers : Array of Integer; size : Integer);

Begin
 QSort(numbers, 0, size-1);

End;


Procedure QSort(numbers : Array of Integer; 
                left : Integer; right : Integer);
Var pivot, l_ptr, r_ptr : Integer;


Begin
 l_ptr := left;
 r_ptr := right;
 pivot := nummbers[left];
 While (left < right)
  Begin
   While ((numbers[right] >= pivot) AND (left < right))
    right := right - 1;
   If (left <> right) then
    Begin
     numbers[left] := numbers[right];
     left := left + 1;
    End;
   While ((numbers[left] <= pivot) AND (left < right))
    left := left + 1;
   If (left <> right) then
    Begin
     numbers[right] := numbers[left];
     right := right - 1;
    End;
  End;
 numbers[left] := pivot;
 pivot := left;
 left := l_ptr;
 right := r_ptr;
 If (left < pivot) then
  QSort(numbers, left, pivot-1);
 If (right > pivot) then
  QSort(numbers, pivot+1, right);
End;