Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2010, 10:17   #1
semak
Новичок
Джуниор
 
Регистрация: 19.01.2010
Сообщений: 2
По умолчанию Посчитать количество сравнений в сортировке Хоара(паскаль)

делаю лабу по структуре данных, задача определить какой метод сортировки лучше?хоар или пузырек, для этого нужно посчитать кол-во сравнений элементов и копирований. вот код
  1. uses crt;
    Const N=8;
    Type
    Mas=array[1..n] of integer;
    var
    z: mas;
    a: mas;
    k,i,j,tmp,ncomp,ncopy: integer;

    function Part(l,r: integer):integer;
    var v, i, j, b: integer;
    begin
    V:=a[r];
    I:=l-1;
    j:=r;
    ncomp:=0;
    ncopy:=0;
    repeat
    repeat

    dec(j) ;
    inc(ncomp);
    until (a[j]<=v) or (j=i+1);
    repeat

    inc(i) ;
    inc(ncomp);
    until (a[i]>=v) or (i=j-1);

    b:=a[i];
    inc(ncopy);
    a[i]:=a[j];
    a[j]:=b;
    inc(ncomp);
    until i>=j;
    inc(ncopy);
    a[j]:=a[i]; inc(ncopy);

    a[i]:= a[r];
    a[r]:=b;
    part:=i;
    end;
    procedure QuickSort(l,t: integer);
    var i: integer;
    begin
    inc(ncomp);
    if l<t then
    begin
    inc(ncomp);
    i:=part(l, t);
    QuickSort(l,i-1);
    QuickSort(i+1,t);
    end;
    end;

    begin
    clrscr;
    for k:=1 to 8 do
    begin
    readln(a[k]);z[k]:=a[k];
    end;
    QuickSort(1,n);
    writeln;
    writeln('вывод значений методом Хоара comp= ',ncomp,' ncopy= ',ncopy);


    ncomp:=0; //число сравнений (compare)
    ncopy:=0; //число копирований (copy)
    for k:=1 to n do
    write(a[k]:4);
    writeln;

    for i:=7 downto 1 do
    for j:=1 to i do
    begin
    inc(ncomp);
    if z[j]>z[j+1] then
    begin
    inc(ncopy);
    tmp:=z[j];
    z[j]:= z[j+1];
    inc(ncopy);
    z[j+1]:=tmp;


    end;
    end;

    write('вывод значений пузырьком comp= ',ncomp,' ncopy= ',ncopy);
    for i:=1 to n do
    write(z[i]:4);
    writeln;


    end.

В пузыре счетчики вроде прально работают, проблема с Хоаром) подскажите ошибки, и кто знает куда поставить счетчики в хоаре
semak вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедура сортировки с подсчётом перестановок и сравнений (Паскаль) Паскалька^^ Помощь студентам 0 17.10.2010 23:35
Посчитать количество введенных двоек Coder01 Общие вопросы Delphi 4 23.08.2010 19:38
посчитать количество строк в матрице M*N Таняпервокурсница Помощь студентам 4 03.06.2010 18:30
Паскаль. найти все числа кратные трем и посчитать их количество __k1ll3r__ Помощь студентам 6 02.04.2008 16:37
Фрактал. Посчитать количество треугольников. Marsik Помощь студентам 2 22.11.2007 08:19