Помощь - Поиск - Пользователи - Календарь
Полная версия: неверно работает процедура сортировки из FAQ
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
atella
в общем , была поставлена задача : есть два массива упорядоченных по убыванию, создать массив ,состоящий из всех элементов исходных массивов , также упорядоченный по убыванию ...
было решено тупо скопировать все элементы , а задем применить стандартную процедуру сортировки , выбран метод пузырька...

Const
n = 8;
m = 7;

Type
TType = Integer;
arrType1 = Array[1 .. n] Of TType;
arrType2 = Array[1 .. m] Of TType;
arrType3 = Array[1 .. n+m] Of TType;

Const
a: arrType1 =
(99, 77, 55, 33, 11, 9, 7, 5);

b: arrType2 =
(88, 66, 44, 22, 10, 8, 6);


Procedure Bubble(Var source, sorted: arrType3);

Procedure SwapIndex(i, j: Integer);
Var
T: TType;
Begin
move(sorted[i], T, SizeOf(TType));
move(sorted[j], sorted[i], SizeOf(TType));
move(T, sorted[j], SizeOf(TType));
End;

Var
i, j: Integer;
Begin
move(source, sorted, SizeOf(arrType3));
For i := 1 To n+m Do
For j := n+m DownTo i Do
If sorted[Pred(j)] < sorted[j] { change here }
Then SwapIndex(Pred(j), j);
End;


Var
c,d: arrType3;
k: integer;

Begin

for k := 1 to n do
begin
c[k] := a[k];
end;


for k := 1 to m do
begin
c[k+n] := b[k];
end;

for k:=1 to m+n do write (c[k],' ');



Bubble(c, d);

writeln;
for k:=1 to m+n do write (d[k],' ')

End.
собственно все отрабатывает, но результат несколько странен :
88 77 66 55 44 33 22 11 10 9 8 7 6 6 5

то есть пропало 99 и появилось двойное 6
klem4
Цитата
было решено тупо скопировать все элементы , а задем применить стандартную процедуру сортировки


решение в корне не верно. тебе нужна сортировка слияниями. Поищи.

На счет твоей программы, щас посмотрю.
volvo
Можно ссылку на тот топик, откуда ты это скопировал? Я хочу посмотреть, ЧТО там написано (в каких случаях применять этот метод)... Вот ссылка на метод пузырька для твоего случая: Методы сортировок
volvo
А в программе достаточно просто сделать:
For j := n+m DownTo i + 1 Do { <--- Здесь }

и она будет работать...
klem4
Действительно, в приаттаченом файле к тому сообщению имел место небольшой недочет. Ошибка исправлена.
atella
Цитата(volvo @ 2.12.2007 11:40) *

Можно ссылку на тот топик, откуда ты это скопировал? Я хочу посмотреть, ЧТО там написано (в каких случаях применять этот метод)... Вот ссылка на метод пузырька для твоего случая: Методы сортировок


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

Добавлено через 12 мин.
Цитата(volvo @ 2.12.2007 11:50) *

А в программе достаточно просто сделать:
и она будет работать...


хмм ... действительно , СПАСИБО !
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.