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

М.А.И.

(Национальный Исследовательский Университет)

Лабораторная работа № 10

Практикум № (Сортировка)

МЕТОДЫ СОРТИРОВКИ

Вариант № 24

Оформил: Абрамов Иван Андреевич

Проверил: Кривилёв А. В.

Москва 2012

Цель работы: ознакомление с методами сортировки массивов, сравнение эффективности различных методов и зависимости времени сортировки от объема массива.

Упражнение 1.

Сортировка выборкой на месте

Алгоритм сортировки массива выборкой на месте состоит в следующем. Производится последовательный перебор элементов массива начиная с пер-вого. Для взятого текущего элемента в оставшейся части массива (от те-кущего элемента и до крайней правой границы) находится минимальное значение. Далее текущий элемент и элемент, имеющий минимальное значе-ние, переставляются местами. Очевидно, данный метод сортировки предпо-лагает выполнение двух операторов цикла: 1) перебор элементов от пер-вого и до последнего; 2) перебор элементов от текущего и до правой границы.

Процесс сортировки можно проиллюстрировать графически следующим об-разом (стрелками показаны элементы, которые меняются местами): x1 x2 xmin
xmin x2 xmin’
xmin xmin’ x3 xmin”…
xmin xmin’ xmin” x4

T = []; % формируется пустой массив времени сортировки

N = [];

for n = [ 1000: 1000: 5000 ]; % меняется размерность массива данных

N = [ N n ];

time = round(clock); % определяется текущее время для инициализации датчика случайных чисел

rand('seed', time(5)*time(6)); % осуществляется инициализация датчика случайных чисел

x = rand(1, n); % генерируется массив случайных чисел из диапазона [ 0 1 ]

x = round(100*x); % случайный массив целых двузначных чисел

t_start = clock; % фиксируется время старта сортировки

for I = 1: (n-1)

min_x = x(I); index = I; % предполагается, что минимальный элемент имеет номер I

for J = (I+1): n % перебираются все элементы от I+1 до n

if x(J) < min_x % если находится элемент меньше, чем

текущий минимум, то он становится

min_x = x(J); % текущим минимальным

index = J; % фиксируется его номер

end

end

buff = x(I); % текущий элемент и минимальный

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

x(index) = buff;

end

t_stop = clock; % фиксируется время остановки сортировки

t = t_stop(6) - t_start(6); % вычисляется время сортировки (сек)

T = [ T t ]; % формируется массив времен сортировки

end;

plot(N, T), grid on % строится график зависимости времени

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

Алгоритмы сортировки обменом основаны на перестановке двух соседних элементов. Соседние элементы меняются местами, если элемент с меньшим номером имеет большее значение (напомним, что речь идет о сортировке в неубывающем порядке). Если максимальный элемент находится на левой границе, то вследствие перестановок он за один прогон будет «выдавлен» на правую границу. Очевидно, что после первого этапа упоря-дочения массива, значение максимального элемента переместится на пра-вую границу. Следовательно, второй этап упорядочения должен произво-диться уже не до правой границы, а до элемента, смещенного влево отно-сительно правой границы на один. И так далее.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: