Curso de Pascal
Quick Sort
Você está em: MarMSX >> Cursos >> Pascal
O Quicksort é um algoritmo de ordenação rápido, criado por C.A.R. Hoare na década de 60. Ele adota a estratégia de divisão e conquista.
A estratégia consiste em rearranjar as chaves de modo que as chaves menores precedam as chaves maiores. Em seguida, o quicksort ordena as duas sublistas de chaves menores e maiores
recursivamente até que a lista completa se encontre ordenada.
Passos:
- Escolha um elemento da lista, denominado pivô.
- Rearranje a lista de forma que todos os elementos anteriores ao pivô sejam menores que ele, e todos os elementos posteriores ao pivô sejam maiores que ele. Ao fim do processo o pivô estará em sua posição final e haverá duas sub listas não ordenadas.
- Recursivamente ordene a sub lista dos elementos menores e a sub lista dos elementos maiores.
Fonte: Wikipedia[1]
A seguir, será apresentado o algoritmo que realiza o Quicksort.
{$A-}
var vetor : array[1..10] of integer;
procedure quicksort(inicio, fim : integer);
var i, j, pivo, aux : integer;
begin
i := inicio;
j := fim;
pivo := vetor[(inicio + fim) div 2];
while (i <= j) do
begin
while (vetor[i] < pivo) and (i < fim) do
i := i+1;
while (vetor[j] > pivo) and (j > inicio) do
j := j-1;
if (i <= j) then
begin
aux := vetor[i];
vetor[i] := vetor[j];
vetor[j] := aux;
i := i+1;
j := j-1;
end;
end;
if (j > inicio) then
quicksort(inicio, j);
if (i < fim) then
quicksort(i, fim);
end;
procedure cria_vetor;
var i : integer;
begin
randomize;
for i:=1 to 10 do
vetor[i] := random(100)+1;
end;
procedure imprime_vetor;
var i : integer;
begin
for i:=1 to 10 do
write(vetor[i], ' ');
writeln;
end;
begin
cria_vetor;
writeln('Vetor desordenado:');
imprime_vetor;
writeln;
quicksort(1, 10);
writeln('Vetor ordenado:');
imprime_vetor;
end.
Adaptado de: Wikipedia[1]
Saída:
Vetor desordenado:
25 59 38 76 98 14 12 93 31 11
Vetor ordenado:
11 12 14 25 31 38 59 76 93 98
Obs: Para os sistemas CP/M-80 que utilizam o Pascal, no caso, o modelo do MSX, deve-se utilizar a diretiva {$A-} para ativar as recursividades.
Referências:
[1]- Quick Sort, Wikipedia - http://pt.wikipedia.org/wiki/Quicksort