Сортировка массива методом "пузырька"
[к списку
алгоритмов]
Сейчас мы поговорим о сортировки массива так называемым
методом "пузырька". По другому этот метод называется методом
перестановок или методом обмена. Почему метод известен как метод
"пузырька", да просто потому, что при его реализации более
"легкие" элементы как бы всплывают вверх. Соответственно, более
тяжелые "идут ко дну", один человек, обладающий видимо хорошим
чувством юмора, заметил, что по всей видимости, пессимисты
называют метод пузырька методом "утопленника".
Итак, представим, что у нас есть целочисленный массив из 10
элементов и нам его необходимо отсортировать по возрастанию.
Вот код программы на Паскале:
{ сортировка массива "пузырьком" по возрастанию }
const
n = 10; { количество элементов в массиве }
var
a:array[1..n] of integer;
i,j,buf:integer;
begin
{Заполняем массив случайными целыми числами из диапазона от 0 до 9 и выводим массив на экран}
for i:=1 to n do
begin
a[i]:=random(10);
write(a[i],' ');
end;
for i:=1 to n-1 do
for j:=i+1 to n do {В этой строке начинающие программисты чаcто допускают ошибку}
if a[i]>a[j] then
begin
buf:=a[i];
a[i]:=a[j];
a[j]:=buf;
end;
writeln;
writeln('Массив после сортировки пузырьковым методом: ');
for i:=1 to n do
write(a[i],' ');
end.
Пояснения. Как видно из текста программы на
Паскале, при сортировке массива методом пузырька, сравниваются
два соседних элемента массива. В том случае, если элемент
массива с номером i оказывается больше
элемента массива с номером i+1,
происходит обмен значениями при помощи вспомогательной
переменной buf (переменной я дал
название со смысловой нагрузкой, от слова "буфер").
Возможные ошибки. Как показывают мои личные
наблюдения, начинающие программисты постоянно наступают на одни
и те же грабли. Вместо строки "for
j:=i+1
to n do" они
зачастую пишут "for j:=2 to n
do", что хоть и приводит к обмену
значениями некоторых переменных, но не дает необходимого
результата.
[к списку
алгоритмов]
|