|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
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 |
Форумчанин
Регистрация: 11.08.2009
Сообщений: 433
|
Как посчитать... Завести переменную целого типа и перед каждым сравнением прибавлять единицу к ней.
С количеством перестановок то же самое. Завести переменную и перед каждой перестановкой увеличивать её значение на единицу. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Функция обьединения двух посортованых файлов в третий методом слияния.. | 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 |