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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2010, 09:57   #1
QuadroX
323787261
Пользователь
 
Аватар для QuadroX
 
Регистрация: 19.12.2008
Сообщений: 49
По умолчанию Проверьте правильность установки счетчиков

В задании требуется подсчитать количество перестановок и сравнений при сортировке массива двумя методами: простыми вставками и бинарными вставками.

Вот процедура сортировки простыми вставками:

Код:
// процедура сортировки вставками
procedure InsertionSort(var A: TData; var SCount, PCount: Integer);
var
  Key, I, J: Integer;
begin
  SCount := 0;
  PCount := 0;
  for J := 2 to N do begin
    Inc(SCount);
    Key := A[J];
    I := J - 1;
    while ((I >= 1)and (A[I] > Key)) do begin
      Inc(PCount);
      A[I+1] := A[I];
      I := I - 1;
      A[I+1] := Key;
    end;
  end;
end;
В ней установлено два счетчика. Не уверен точно в правильности т.к. делал их сам . SCount - счетчик сравнений; PCount - счетчик перестановок.

Аналогично с предыдущей процедурой нужно установить такие же счетчики в процедуру сортировки бинарными вставками.

Вот она:

Код:
// процедура сортировки бинарными вставками
procedure BinInsertionSort(var A: TData; var SCount, PCount: Integer);
var
  I, J, Left, Right, M: Integer;
  Tmp: Integer;
begin
  SCount := 0;
  PCount := 0;
  for I := 2 to N do begin
    Inc(SCount);
    Tmp := A[I];
    Left := 1;
    Right := I - 1;
    while Left <= Right do begin
      M := (Left + Right) div 2;//определение индекса среднего элемента
      if Tmp < A[M] then
        Right := M - 1    // сдвиг правой
      else
        Left := M + 1                //или левой границы
    end;
    for J := I - 1 downto Left do begin
      A[J+1] := A[J]; // сдвиг элементов
     Inc(PCount);
    end;
    A[Left] := Tmp;  // вставка элемента на нужное место
  end;
end;  //  BinInsert
Кто хорошо разбирается в логике этих процедур проверьте правильность счетчиков. Проверить мне не на чем. Тестов нет никаких.
ICQ: 323787261
Email: pschegolevatykh@gmail.com
QuadroX вне форума Ответить с цитированием
Старый 20.04.2010, 13:53   #2
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

В ваших процедурах сравнения выполняются в операторах while и if. Следовательно перед ними необходимо увеличивать счетчик сроавнений. При этом не следуат забывать, что сравнения выполняются при каждом выполнении оператора while. А это значит, что в этом цикле также необходимо увеличивать значение счётчика. А это вы не сделали.
Всякое безобразие должно быть единообразным. Тогда это называется порядком.
Anatole вне форума Ответить с цитированием
Старый 20.04.2010, 14:10   #3
QuadroX
323787261
Пользователь
 
Аватар для QuadroX
 
Регистрация: 19.12.2008
Сообщений: 49
По умолчанию

Большое спасибо. Хоть кто-то откликнулся. =)

Переделал первую.

Код:
// процедура сортировки вставками
procedure InsertionSort(var A: TData; var SCount, PCount: Integer);
var
  Key, I, J: Integer;
begin
  SCount := 0;
  PCount := 0;
  for J := 2 to N do begin
    Inc(SCount);
    Key := A[J];
    I := J - 1;
    while ((I >= 1)and (A[i] > Key)) do begin
      Inc(SCount);
      Inc(PCount);
      A[I+1] := A[i];
      I := I - 1;
      A[I+1] := Key;
    end;
  end;
end;
По первой теперь все правильно?
ICQ: 323787261
Email: pschegolevatykh@gmail.com
QuadroX вне форума Ответить с цитированием
Старый 20.04.2010, 14:46   #4
QuadroX
323787261
Пользователь
 
Аватар для QuadroX
 
Регистрация: 19.12.2008
Сообщений: 49
По умолчанию

Со второй так и не понял где вставить.
ICQ: 323787261
Email: pschegolevatykh@gmail.com
QuadroX вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверьте на правильность плиз Agent[PNZ] Помощь студентам 3 11.06.2014 19:50
Проверьте правильность программы neomaximus Помощь студентам 3 06.04.2009 04:24
Проверьте на правильность!! Dawystrik Общие вопросы Delphi 2 21.03.2009 21:04
Проверьте правильность пожалуйста Анжелика Помощь студентам 17 11.01.2009 00:28
Проверьте правильность Аленушка Помощь студентам 6 07.01.2009 17:07