Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Суть этого алгоритма состоит в том, что элемент сортируемого списка как бы "всплывает", подобно пузырьку (кстати, именно поэтому алгоритм получил свое название), и движется он до тех пор, пока не найден свое место. В реализации этот алгоритм очень прост, смотрите сами: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;
Естественно, перестановка нужна только в том случае, когда предыдущий элемент больше текущего - значит, его нужно "опустить", а текущий наоборот, "поднять". Если мы сортируем по убыванию, тогда, естественно, все наоборот.
Дата публикования: 2015-02-03; Прочитано: 269 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!