Помогите пожалуйста добавить в эту программу квиксорт (quicksort) и подсчитать в ней перестан и сравнения.
я пробовал брать стандартный пример квик сорта из экзамплов и вставлял в него счетчики , но они не работали =( . Помогите плз.
и результаты перестановок и сравнений надо представить с помощью гистограмм.(с графикой я вообще не люблю общаться =( )
uses crt;
const n=100;
type tm= array [1..n] of integer;
var i,j,peres,k,u,temp,srav,otv:integer;
a,b:tm ;
procedure pech_massiv(a:tm);
begin
randomize;
for i:=1 to n do
write(a[i],' ');
writeln;
end;
Procedure pr_vkl (var a:tm);
var
i,j,m,r:integer;
begin
for i:=2 to n do
begin
r:=a[i];
j:=i-1;
while (j>=1)and(r<a[j]) do begin
a[j+1]:=a[j];
dec(j);
Inc(Srav);
Inc(Peres);
end;
a[j+1]:=r;
end;
textcolor(blue);
for i:=1 to n do
write(a[i],' ');
writeln;
textcolor(white);
writeln('Metod priamogo vklycheniia:');
writeln('Chislo perestanovok = ',peres);
writeln('Chislo sravneniy = ',srav);
readln;
end;
procedure vybor(a:tm);
begin
peres:=0;
srav:=0;
for i:= 1 to n-1 do
begin
k := i;
temp := a [i];
for j := i+1 to n do
begin
inc(srav);
if a [j] < temp then
begin
k := j;
temp := a [j];
end;
end;
a [k] := a [i];
if k <> i then inc(peres);
a [i] := temp;
end;
write('Sortirovka');
textcolor(red);
for i:=1 to n do
write(a[i],' ');
writeln;
textcolor(3);
writeln('Metod priamogo vybora:');
textcolor(white);
writeln('Chislo perestanovok = ',peres);
writeln('Chislo sravneniy = ',srav);
end;
begin
clrscr;
textcolor(5);
writeln('Neotsortirovannyu massiv:');
randomize;
for i:=1 to n do
begin
a[i]:=random(100);
textcolor(green);
write(a[i],' ');
end;
writeln;
Srav:=0;
Peres:=0;
b:=a ;
vybor(a);
pr_vkl(a);
textcolor(5);
writeln('massiv otsortirovannyu po vozrastaniy:');
textcolor(green);
for i:=2 to n do
for j:=n downto 1 do
if a[j-1]>a[j] then
begin
u:=a[j-1];
a[j-1]:=a[j];
a[j]:=u;
end;
for i:=1 to n do
write (a[i], ' ');
writeln;
b:=a ;
Srav:=0;
Peres:=0;
vybor(a);
pr_vkl(b);
writeln;
{clrscr;}
textcolor(5);
writeln('Massiv otsortirovannyu po ybyvaniy:');
textcolor(green);
for i:=2 to n do
for j:=n downto 1 do
if a[j-1]<a[j] then
begin
u:=a[j-1];
a[j-1]:=a[j];
a[j]:=u;
end;
for i:=1 to n do
write (a[i], ' ');
writeln;
Srav:=0;
Peres:=0;
vybor(a);
pr_vkl(a);
writeln;
b:=a;
repeat
begin
writeln(' 1-Exit ');
readln(otv);
case otv of
1:end;
end;
until otv=1;
end.