Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metody_sortirovki.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
85.5 Кб
Скачать

3. Алгоритмы сортировки обменом

Алгоритмы сортировки обменом основаны на перестановке двух соседних элементов. Соседние элементы меняются местами, если элемент с меньшим номером имеет большее значение (напомним, что речь идет о сортировке в неубывающем порядке).

3.1. Сортировка методом «пузырька»

Метод «пузырька» назван так по сходству процессов при сортировке и подъема воздушного пузырька в стакане с жидкостью. Допустим, что жидкость состоит из отдельных слоев. Тогда образовавшийся на дне воздушный пузырек поднимается вверх, последовательно меняясь местами с расположенными над ним слоями воды.

Также и при сортировке массива, если максимальный элемент находится на левой границе, то вследствие перестановок он за один прогон будет «выдавлен» на правую границу. Очевидно, что после первого этапа упорядочения массива, значение максимального элемента переместится на правую границу. Следовательно, второй этап упорядочения должен производиться уже не до правой границы, а до элемента, смещенного влево относительно правой границы на один. И так далее. Очевидно также, что если массив уже упорядочен, то нет необходимости реализовывать алгоритм до конца. В связи с этим, метод пузырька предполагает возможность подсчета количества перестановок элементов (хотя это и не обязательно). Процесс сортировки заканчивается, если осуществлен полный перебор элементов массива или количество перестановок равно 0. Иллюстрацией к сортировке методом «пузырька» может служить следующая схема. На ней представлен массив из четырех чисел. Два сравниваемых значения взяты в квадратные скобки. Если в результате сравнения элементы меняются местами, то они выделены жирным шрифтом. В результате первого перебора массива произошло три (L=3) перестановки, в результате которых значение 48 переместилось в крайний правый элемент.

После того, как первый перебор закончен, граница смещается на единицу (перенос пунктирной линии на схеме). В результате второго перебора произошла еще одна перестановка (L=4). Как видно, массив уже упорядочен. Поэтому последний перебор (а это сравнение текущих значений первого и второго элементов) не вносит в него изменений.

Исходный массив

48

21

6

39

1)

[48]

[21]

6

39

2)

21

[48]

[6]

39

3)

21

6

[48]

[39]

После первого перебора

21

6

39

48

L=3

4)

[21]

[6]

39

48

5)

6

[21]

[39]

48

После второго перебора

6

21

39

48

L=4

6)

6

21

39

48

Окончательное состояние

6

21

39

48

Сортировка методом «пузырька» может быть проиллюстрирована следующей программой (в данном примере нет подсчета числа перестановок):

% программная реализация сортировки массива методом

% "пузырька" (сортировка обменом)

clear all;

T = [];

for n = [ 1000 : 1000 : 5000 ];

time = round( clock );

rand( 'seed', time(5)*time(6) );

x = rand( 1, n );

x = round( 100*x );

t_start = clock;

J = n - 1; % устанавливается начальное значение

% правой "границы" сортировки

while J ~= 0 % пока эта граница не совпала с началом массива

for I = 1 : J % перебираются все элементы с 1-го

% до "границы" сортировки

if x( I ) > x( I+1 ) % если условие упорядочения массива

% не выполнено, то два соседних

buff = x( I ); % меняются местами

x( I ) = x( I+1 );

x( I+1 ) = buff;

end;

end;

J = J - 1; % "граница" сортировки сдвигается влево

end;

t_stop = clock;

t = t_stop( 6 ) - t_start( 6 );

T = [ T t ];

end;

plot( T ), grid on

Как и в предыдущем случае строится график зависимости времени сортировки от объема сортируемого массива.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]