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

3.2. Челночная сортировка

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

Как и в случае сортировки методом «пузырька», челночная сортировка может быть проиллюстрирована следующей схемой (обозначения такие же, как и в предыдущем случае). Как видно из схемы, после второго шага (после сравнения и перестановки чисел 48 и 6) происходит откат до начала массива (в данном случае сравнение чисел 21 и 6). Далее процесс возобновляется с того места, откуда был произведен откат. Очевидно, что челночная сортировка более эффективна, чем сортировка методом «пузырька». Считается, что из рассмотренных алгоритмов челночная сортировка наиболее выгодна, особенно для больших массивов, элементы которых являются в свою очередь сложными структурами (структурами или ячейками). Однако более точно ответить на этот вопрос можно, только проведя сравнение рассмотренных методов сортировки.

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

48

21

6

39

1)

[48]

[21]

6

39

2)

21

[48]

[6]

39

откат

[21]

[6]

48

39

4)

6

21

[48]

[39]

откат

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;

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

% до предпоследнего

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

% не выполнено

for J = I : -1 : 1 % откат назад от текущего элемента до первого

if x( J ) > x( J+1 ) % и при необходимости перестановка

buff = x( J );

x( J ) = x( J+1 );

x( J+1 ) = buff;

end;

end;

end;

end;

t_stop = clock;

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

T = [ T t ];

end;

plot( T ), grid on

В заключение отметим, что целью практического занятия является ознакомление с методами сортировки массивов, сравнение эффективности различных методов и зависимости времени сортировки от объема массива. Кроме того, необходимо сравнить указанные методы с функцией Matlab sort, которая собственно и предназначена для проведения сортировки массивов данных. Сортировке функцией sort необходимо подвергать тот же массив, что сортируется и другими методами. Для этого значения сформированного массива х можно передать другому массиву (например, y). И уже этот массив подвергнуть сортировке стандартной функцией Matlab. Очевидно, что при этом необходимо также фиксировать и время этой сортировки.

Все разрабатываемые программы должны обеспечивать визуализацию результатов, вывод их в рабочую область. В отчете должны быть представлены графики (допускаются построенные «от руки») зависимостей времени сортировки от объема массива. В заключение работы должен быть сделан обоснованный вывод о наиболее эффективном методе сортировки.

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