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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2010, 11:22   #1
Вера_М
Новичок
Джуниор
 
Регистрация: 20.06.2010
Сообщений: 1
Вопрос Сортировка методом слияния.

Есть код для сортировки методом слияния на Паскале, как посчитать количество сравнений и перестановок в ней, если мы зададим массив 5, 15, 25, 35 ... и так далее 20 раз, например? Вот сам код программы сортировки:
program SortSlian;
uses crt;
type mas=array[1..1000] of integer;
procedure Sliv(var a:mas;p,q : integer);
{процедура сливающая массивы, p-начало, q-конец}
var r,i,j,k : integer;
b:mas;
begin
r:=(p+q) div 2;{делим массив}
i:=p;{начало левой половины}
j:=r+1;{начало правой половины}
for k:=p to q do{смотрим от начала до конца}
if (i<=r) and ((j>q) or (a[i]<a[j])) then
{переставляем элементы из половин в новый массив, упорядочивая пары}
begin
b[k]:=a[i];
i:=i+1;
end
else
begin
b[k]:=a[j];
j:=j+1;
end ;
for k:=p to q do
a[k]:=b[k];
end;
{рекурсивная процедура сортировки, проверяет если осталось
больше одного элемента, повторяет слияние в левой или правой частях массива}
procedure Sort(var a:mas;p,q : integer); {p,q - индексы начала и конца сортируемой части массива}
begin
if p<q then {массив из одного элемента тривиально упорядочен}
begin
Sort(a,p,(p+q) div 2);{сортируем левую половину}
Sort(a,(p+q) div 2 + 1,q);{правую половину}
Sliv(a,p,q);{сливаем две половины}
end;
end;
var a:mas;
n,i:integer;
begin
clrscr;
randomize;
write('Размер массива n=');
readln(n); {Определение размера массива A - N) и его заполнение}
writeln('Исходный массив:');
for i:=1 to n do
begin
a[i]:=random(50);
write(a[i],' ');
end;
writeln;
writeln;
{запуск сортирующей процедуры, сортируем от первого до последнего элемента}
Sort(a,1,N);
{Вывод отсортированного массива A}
writeln('Результат сортировки:');
for i:=1 to n do
write(a[i],' ');
readln
end.
Вера_М вне форума Ответить с цитированием
Старый 20.06.2010, 11:33   #2
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Как посчитать... Завести переменную целого типа и перед каждым сравнением прибавлять единицу к ней.
С количеством перестановок то же самое. Завести переменную и перед каждой перестановкой увеличивать её значение на единицу.
mMAg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция обьединения двух посортованых файлов в третий методом слияния.. eva.t Паскаль, Turbo Pascal, PascalABC.NET 0 06.06.2010 02:39
Сортировка методом Хора nafanya_naf Помощь студентам 2 31.05.2010 19:37
Сортировка методом Шелла Nostalgia Помощь студентам 0 12.04.2010 14:13
Сортировка методом пузырька fygas1991 Общие вопросы C/C++ 5 15.11.2009 21:39
Сортировка методом линейного выбора и "быстрая" сортировка Карол Помощь студентам 4 27.09.2009 19:52