Procedure QuickSort(var v:vetor;tam:integer);

Procedure sort(var v:vetor;inicio,fim: integer);
var
  i,j,x,aux: integer;
begin
  i:=inicio;
  j:=fim;
  x:=v[(inicio+fim) DIV 2];
  repeat
    while v[i]<x do
       i:=i+1;
    while v[j]>x do
       j:=j-1;
    if i<=j then
    begin
      aux := v[i];
      v[i] := v[j];
      v[j]:=aux;
      i:=i+1;
      j:=j-1;
    end;
  until i > j;
  if inicio < j then
     sort(v,inicio,j);
  if i < fim then
     sort(v,i,fim);
end;

begin
  sort(v,1,tam);
end;