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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2009, 17:34   #1
Igomax
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 36
По умолчанию Сравнение сортировок Паскаль

Необходимо сравнить сортировку выбора и сортировку адресную. Определить в каждой сортировке количество проходов по массиву, количество сравнений и количество перестановок.

У меня получилась следующая программа, но счётчики раставлены скорее всего неправильно. Помогите пожалуйста исправить программу.

Код:
PROGRAM SORT;
uses crt;
CONST N=4;
type ma=array[1..n]of integer;


var a:ma;
i,p1,p2,s1,s2,pr1,pr2:integer;


procedure vibor (a:ma);
var imIN,MIN,I,J:INTEGER;
begin
p1:=0; s1:=0; pr1:=0;
FOR I:=1 TO n-1 DO
BEGIN p1:=p1+1;
MIN:=A[I]; IMIN:=I;
FOR J:=I TO N DO begin s1:=s1+1;
IF MIN>A[J] THEN BEGIN MIN:=A[J];
IMIN:=J;
END;    end;
A[IMIN]:=A[I];
A[I]:=MIN; pr1:=pr1+1;
END;
writeln;
write ('sortirovka vibora'); writeln;
for i:=1 to n do
WRITE(a[i]:8);        writeln;
write ('prohody=',p1:2,  '  sravneniia=',s1:2, '  perestanovka=',pr1:2);
end;


procedure adress (a:ma);

var B:array[byte] of 0..n;
i,s,k:integer;
begin
p2:=0; s2:=0; pr2:=0;
for i:=0 to 255 do b[i]:=0;
for i:=0 to n do b[a[i]]:=b[a[i]]+1;
k:=-1; s:=0;
for i:=0 to 255 do
begin p2:=p2+1;
if b[i]<>0 then begin s2:=s2+1; s:=s+b[i];
while k+1<>s do begin k:=k+1;
a[k]:=i; pr2:=pr2+1; end;end; end;
writeln;
write ('adresnaia sortirovka'); writeln;
for i:=1 to n do
WRITE(a[i]:8);
writeln;
write ('prohody=',p2:2,  '  sravneniia=',s2:2, '  perestanovka=',pr2:2);
END;

BEGIN clrscr;
RANDOMIZE;  writeln;
FOR I:=1 TO N DO BEGIN a[I]:=RANDOM(50);
WRITE (a[I]:8); END; writeln;
vibor(a);
adress(a);
end.
Igomax вне форума Ответить с цитированием
Старый 24.10.2009, 17:39   #2
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

адресная выиграла?
она у вас упорядочивает уже упорядоченный массив!
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 24.10.2009, 17:47   #3
Igomax
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 36
По умолчанию

Цитата:
Сообщение от ОДИНОЧЕСТВО В СЕТИ Посмотреть сообщение
адресная выиграла?
она у вас упорядочивает уже упорядоченный массив!
Вроде нет!
Igomax вне форума Ответить с цитированием
Старый 24.10.2009, 17:49   #4
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Цитата:
Код:
vibor(a);
adress(a);
сначала сортируете выбором а потом поэтому же массиву адресной сортировкой проходите!
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 24.10.2009, 17:51   #5
Igomax
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 36
По умолчанию

Код:
PROGRAM SORT;
uses crt;
CONST N=4;
type ma=array[1..n]of integer;


var b:ma;
i,p1,p2,s1,s2,pr1,pr2:integer;


procedure vibor (a:ma);
var imIN,MIN,I,J:INTEGER;
begin
p1:=0; s1:=0; pr1:=0;
FOR I:=1 TO n-1 DO
BEGIN p1:=p1+1;
MIN:=A[i]; IMIN:=I;
FOR J:=I TO N DO begin s1:=s1+1;
IF MIN>A[J] THEN BEGIN MIN:=A[J];
IMIN:=J;
END;    end;
A[IMIN]:=A[i];
A[i]:=MIN; pr1:=pr1+1;
END;
writeln;
write ('sortirovka vibora'); writeln;
for i:=1 to n do
WRITE(a[i]:8);        writeln;
write ('prohody=',p1:2,  '  sravneniia=',s1:2, '  perestanovka=',pr1:2);
end;


procedure adress (a:ma);

var B:array[byte] of 0..n;
i,s,k:integer;
begin
p2:=0; s2:=0; pr2:=0;
for i:=0 to 255 do b[i]:=0;
for i:=0 to n do b[a[i]]:=b[a[i]]+1;
k:=-1; s:=0;
for i:=0 to 255 do
begin p2:=p2+1;
if b[i]<>0 then begin s2:=s2+1; s:=s+b[i];
while k+1<>s do begin k:=k+1;
a[k]:=i; pr2:=pr2+1; end;end; end;
writeln;
write ('adresnaia sortirovka'); writeln;
for i:=1 to n do
WRITE(a[i]:8);
writeln;
write ('prohody=',p2:2,  '  sravneniia=',s2:2, '  perestanovka=',pr2:2);
END;

BEGIN clrscr;
RANDOMIZE;  writeln;
FOR I:=1 TO N DO BEGIN b[i]:=RANDOM(50);
WRITE (b[i]:8); END; writeln;
vibor(b);
adress(b);
Вот так?
Igomax вне форума Ответить с цитированием
Старый 24.10.2009, 17:54   #6
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Код:
BEGIN clrscr;
RANDOMIZE;  writeln;
FOR I:=1 TO N DO BEGIN
 a[i]:=RANDOM(50);
 b[i]:=a[i]
 END; writeln;
vibor(a);
adress(b);
end.
вот так исправьте основную программу и обьявите массив b такой же как массив а
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 24.10.2009, 17:58   #7
Igomax
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 36
По умолчанию

Цитата:
Сообщение от ОДИНОЧЕСТВО В СЕТИ Посмотреть сообщение
Код:
BEGIN clrscr;
RANDOMIZE;  writeln;
FOR I:=1 TO N DO BEGIN
 a[i]:=RANDOM(50);
 b[i]:=a[i]
 END; writeln;
vibor(a);
adress(b);
end.
вот так исправьте основную программу и обьявите массив b такой же как массив а
От этого в любом случаи счётчики не начнут правильно считать
Igomax вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
какая из трех сортировок (обменная,исчерпыванием,выбором) самая быстрая? Cyberbest Помощь студентам 2 26.04.2008 10:34
модуль сортировок на паскале Proskurin Помощь студентам 1 19.04.2008 15:35
Паскаль. Сравнение на подобность треугольников. Координаты вершин в матрице. Jondeer Помощь студентам 3 07.11.2007 07:31
Время работы сортировок Боня Помощь студентам 1 10.02.2007 17:53
Усовершенствованные методы сортировок -=Domestos=- Помощь студентам 1 20.12.2006 20:51