Консультация № 173887
01.11.2009, 16:21
0.00 руб.
0 3 2
Уважаемые эксперты,помогите решить задачку.
Дан одномерный массив. Отсортировать элементы массва в порядке возрастания методом "пузырька"

Обсуждение

давно
Специалист
246813
155
01.11.2009, 16:52
общий
это ответ
Здравствуйте, Ропов Алексей.
Для начала вспомним идею этого метода: шаг сортировки состоит в проходе снизу вверх по массиву. По пути просматриваются пары соседних элементов. Если элементы некоторой пары находятся в неправильном порядке, то меняем их местами.
Код:
program q173887;
{Упорядочивание элементов в массиве по возрастанию их значений}
var i,n,j:integer;
b:word;
y:array [1..100] of word;
begin
WriteLn('Введите размер массива: ');
ReadLn(n);
for i:=1 to n do
begin
Write('y=[',i,']=');
ReadLn(y[i]);
end;
WriteLn('массив у ');
for i:=1 to n do write(y[i],' ');
WriteLn;
for j:=1 to n-1 do
for i:=1 to n-j do
if y[i]>y[i+1] then {Если текущий элемент больше следующего, то}
begin{меняем их местами}
b:=y[i];{Сохраняем текущее значение элемента}
y[i]:=y[i+1];{Заменяем текущий элемент следующим}
y[i+1]:=b;{Заменяем слежующий элемент текущим}
end;
WriteLn('упорядоченный масссив');
for i:=1 to n do
write(y[i],' ');
WriteLn;
Readln;
end.
5
Неизвестный
01.11.2009, 17:23
общий
это ответ
Здравствуйте, Ропов Алексей.
Метод пузырька получил своё название от того, что самые маленькие (лёгкие) элементы быстро перемещаются к началу массива ("всплывают", как пузырьки).
Достигается это проходом по массиву, сравнением соседних элементов. Если элемент с большим индексом оказывается "легче" соседнего элемента с большим индексом, они обмениваются местами. Таким образом, после i-го прохода в начале массива оказываются i самых "лёгких" элементов.

Код - в приложении.

Приложение:
uses crt;

const N=15;
var a: array[1..N] of word;

procedure bubble_sort;
var i,j: byte;
tmp: word;
begin
for i:= 1 to N-1 do
for j:=N downto i+1 do
if a[j]<a[j-1] then
begin
tmp:=a[j];
a[j]:=a[j-1];
a[j-1]:=tmp
end
end;

var i:byte;
begin
clrscr;
randomize;
writeln('Исходный массив');
for i:=1 to N do
begin
a[i]:=random(1000);
write(a[i]:4)
end;
bubble_sort;
writeln;
writeln('Отсортированный массив');
for i:=1 to N do
write(a[i]:4);
readkey
end.
Форма ответа