Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методы_new1.doc
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
197.59 Кб
Скачать
  1. Сортировка пузырьковым всплытием (обменом)

Идея метода: шаг сортировки состоит в проходе сверху вниз по массиву. По пути просматриваются пары соседних элементов. Если элементы некоторой пары находятся в неправильном порядке, то меняем их местами.

Метод иногда называют методом перестановки соседних элементов.

Сортируемый массив в процессе сортировки остается на одном и том же месте.

Минимальные элементы как бы всплывают к началу массива.

В случае сортированного массива производится однократная проверка сортированности (количество сравнений равно n-1), в этом основное достоинство метода.

В общем случае количество сравнений пропорционально (n2). На практике метод пузырька, даже с улучшениями, работает слишком медленно. А потому - почти не применяется.

//-----------------------------------------------------------------------------------------

template< class T >

Void bubbleSort(t* arr, int size)

{    T tmp;

  int pr;

    for(int i = 0; i < size - 1; ++i) // i - номер прохода

    {   pr=1;         

        for(int j = size - 1; j >=i+1; --j) // внутренний цикл прохода

        {    

            if (arr[j - 1] >arr[j])

            { pr=0;

                tmp = arr[j - 1];

                arr[j - 1] = arr[j];

                arr[j] = tmp;

            }

        }

If(pr) break;

    }

}

//-----------------------------------------------------------------------------------------------

  1. Шейкерная (перемешиванием) сортировка

Рассматриваемый алгоритм имеет несколько непохожих друг на друга названий. Среди них: сортировка перемешиванием, двунаправленная пузырьковая сортировка, шейкерная сортировка, пульсирующая сортировка (ripple sort), трансфертная сортировка (shuttle sort).

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

Это действительно альтернативная версия известного метода, модификации в котором заключаются, по большей части, в реализации, упомянутой в названии, двунаправленности: алгоритм перемещается, ни как в обменной (пузырьковой) сортировке – строго снизу вверх (слева направо), а сначала снизу вверх, потом сверху вниз.

Перестановка элементов в шейкерной сортировке выполняется аналогично той же в пузырьковой сортировке, т. е. два соседних элемента, при необходимости, меняются местами.

Пусть массив требуется упорядочить по возрастанию. Обозначим каждый пройденный путь от начала до конца последовательности через Wi, где i – номер пути; а обратный путь (от конца к началу) через -Wj, где j – номер пути.

Тогда, после выполнения Wi, один из неустановленных элементов будет помещен в позицию справа, как наибольший элемент из еще неотсортированных элементов. А после выполнения -Wj, наименьший из неотсортированных, переместиться в некоторую позицию слева.

Так, например, после выполнения W1 в конце массива окажется элемент, имеющий наибольшее значение, а после -W1 в начало отправиться элемент с наименьшим значением.

Код программы на C++:

template< class T >