Witam, Chciałbym się dowiedzieć czy zarówno ten algorytm jak i wyniki są prawidłowe.
procedure quick(l,p : byte);
var
i,j : integer;
x,w: integer;
begin
i:=l;
j:=p;
x:=tablica[(l+p) div 2];
repeat
while tablica[i] < x do begin i:=i+1; inc(licznikQ); end;
while x < tablica[j] do begin j:=j-1; inc(licznikQ); end;
if i <= j then
begin
w:=tablica[i];
tablica[i]:=tablica[j];
tablica[j]:=w;
inc(zamienQ);
i:=i+1;
j:=j-1;
inc(licznikQ);
end;
until i>j;
if l < j then quick(l,j);
if i < p then quick(i,p);
end;
Gdzie:
tablica[] jest tablicą z liczbami.
licznikQ - tutaj zapisywana jest liczba porównań
zamienQ - tutaj jest liczba przeprowadzonych zamian
I tak wyglądają przykładowe wyniki:
Tabela posortowana na wejściu:
Liczba elementów | Porównania | Zamiany |
---|---|---|
10 | 25 | 6 |
100 | 543 | 63 |
2000 | 1366 | 127 |
Tabela posortowana odwrotnie na wejściu: | ||
Liczba elementów | Porównania | Zamiany |
---------------- | ---------------- | ---------------- |
10 | 23 | 11 |
100 | 498 | 112 |
2000 | 1238 | 230 |
Losowe wartości na wejściu: | ||
Liczba elementów | Porównania | Zamiany |
---------------- | ---------------- | ---------------- |
10 | 26 | 10 |
100 | 738 | 186 |
2000 | 1692 | 428 |