Witam
Mam problem w prawidłowym usytuowaniu liczników zamian w procedurach sortowania.
Liczniki porównań to:
LiczPorBab - Licznik Porównań Sortowania Bąbelkowego
LiczZamBab - Licznik Zamian Sortowania Bąbelkowego
LiczZamWsta - Licznik Zamian Sortowania przez Wstawianie
LiczPorWsta - Licznik Porównań Sortowania przez Wstawianie
LiczPorShell - Licznik porównań Sortowania Shell
LiczZamShell - Licznik zamian Sortowania Shell
LiczPorSzyb - Licznik Porównań Sortowania Szybkiego
LiczZamSzyb - Licznik Zamian Sortowania Szybkiego
Proszę o pomoc. Pozdrawiam
procedure SortowanieBabelkowe();
var
i, j, x : Integer;
begin
//Sortowanie zbioru i liczenie zamian
LiczPorBab := (n - 1) * (n - 1);
for i := 1 to N - 1 do
for j := 1 to N - 1 do
if Tb[j] > Tb[j + 1] then
begin
x := Tb[j];
Tb[j] := Tb[j + 1];
Tb[j + 1] := x;
LiczZamBab := LiczZamBab + 1;
end;
end;
procedure SortowaniePrzezWstawianie();
var
i, j, x : Integer;
licznik : Real;
begin
for j := N - 1 downto 1 do
begin
x := Tb[j];
i := j + 1;
while (i <= N) and (x > Tb[i]) do
begin
Tb[i - 1] := Tb[i];
inc(i);
LiczZamWsta := LiczZamWsta + 1;
end;
Tb[i - 1] := x;
LiczPorWsta := LiczPorWsta + 1;
end;
end;
procedure SortowanieShella();
var
h, i, j, x : integer;
begin
h := 1;
repeat
h := 3 * h + 1;
until h >= N;
h := (h div 9);
if h = 0 then
h := 1; // istotne dla małych N, dla większych można pominąć!
// Sortujemy
while h > 0 do
begin
for j := N - h downto 1 do
begin
x := Tb[j];
i := j + h;
while (i <= N) and (x > Tb[i]) do
begin
Tb[i - h] := Tb[i];
inc(i, h);
end;
Tb[i - h] := x;
LiczPorShel := LiczPorShel + 1;
end;
h := h div 3;
end;
LiczZamShel := LiczZamShel + 1;
end;
procedure SortowanieSzybkie(lewy, prawy : integer);
var
i, j, piwot, x : Integer;
begin
LiczPorSzyb := LiczPorSzyb + 1;
i := (lewy + prawy) div 2;
piwot := Tb[i];
Tb[i] := Tb[prawy];
j := lewy;
for i := lewy to prawy - 1 do
if Tb[i] < piwot then
begin
x := Tb[i];
Tb[i] := Tb[j];
Tb[j] := x;
inc(j);
end;
Tb[prawy] := Tb[j];
Tb[j] := piwot;
if lewy < j - 1 then
SortowanieSzybkie(lewy, j - 1);
if j + 1 < prawy then
SortowanieSzybkie(j + 1, prawy);
LiczZamSzyb := LiczZamSzyb + 1;
end;