Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчёт по лабораторной работе № 11.docx
Скачиваний:
2
Добавлен:
31.08.2019
Размер:
95.74 Кб
Скачать

М.А.И.

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

Лабораторная работа № 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