Лекция: Алгоритм пузырьковой сортировки (bubble, for, var, TListBox, циклы в pascal)

 

Суть этого алгоритма состоит в том, что элемент сортируемого списка как бы «всплывает», подобно пузырьку (кстати, именно поэтому алгоритм получил свое название), и движется он до тех пор, пока не найден свое место. В реализации этот алгоритм очень прост, смотрите сами:procedure Bubble(var item: DataArray; count:integer);

var

i,j: integer;

x: DataItem;

begin

for i := 2 to count do

begin

for j := count downto i do

if item[j-1]>item[j] then

begin

x := item[j-1];

item[j-1] := item[j];

item[j] := x;

end;

end;

end;

 

 

Если вы внимательно посмотрите на программу, то наверняка сразу зададите вопрос, почему первый цикл начинается со второго элемента? Что бы ответить на него, посмотрим вложенный цикл. Он начинается с конца сортируемого списка и идет в обратном направлении до текущего элемента родительского цикла. Теперь обратим внимание на содержимое вложенного цикла:if item[j-1]>item[j] then

begin

x := item[j-1];

item[j-1] := item[j];

item[j] := x;

end;

 

 

Как видим, мы совершаем операции с элементом под номером j-1. На первом проходе это и будет элемент под номером 1 (потому что 2-1=1).

 

Как же работает алгоритм пузырьковой сортировки? Верхний цикл перемещает указать в прямом направлении, за указателем элементы оказываются отсортированными. А непосредственно сортировкой занимается вложенный цикл. Он то и как раз «проталкивает» элемент до своего места, делая это путем перестановок. x := item[j-1];

item[j-1] := item[j];

item[j] := x;

 

 

Естественно, перестановка нужна только в том случае, когда предыдущий элемент больше текущего — значит, его нужно «опустить», а текущий наоборот, «поднять». Если мы сортируем по убыванию, тогда, естественно, все наоборот.

 

еще рефераты
Еще работы по информатике