Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Одесса / Iнформатика / Сортировка.doc
Скачиваний:
9
Добавлен:
10.02.2016
Размер:
439.81 Кб
Скачать

Перемешивание

В некоторых приложениях требуется выполнять операцию, противоположную

сортировке. Задается список элементов, которые программа должна расположить

в случайном порядке. Перемешивание (unsorting) списка можно достаточно про-

сто реализовать с помощью алгоритма, немного похожего на сортировку выбором.

Для каждой позиции списка алгоритм случайным образом выбирает элемент.

При этом рассматриваются только элементы из еще не помещенных на свое мес-

то. Затем выбранный элемент меняется местами с элементом, стоящим в данной

позиции.

Поскольку алгоритм заполняет каждую позицию в массиве один раз, его слож-

ность составляет порядка O(N).

Вероятность появления любого элемента в любой позиции равна 1 / N. Поэто-

му алгоритм действительно приводит к случайному размещению элементов.

Результат зависит также от генератора случайных чисел. Он должен выра-

батывать только равновероятные случайные числа. Функция Delphi Random в боль-

шинстве случаев дает приемлемый результат. Вы должны убедиться, что для ини-

циализации этой функции используется оператор Randomize. В противном случае

Random будет выдавать одну и ту же последовательность псевдослучайных зна-

чений.

Сортировка вставкой

Сортировка вставкой (insertion sort) - еще один алгоритм сложности О(N2).

Идея состоит в том, чтобы сформировать новый сортированный список, просмат-

ривая все элементы в исходном списке в обратном порядке. Алгоритм просматри-

вает исходный список в порядке возрастания и ищет место, где необходимо вста-

вить новый элемент. Затем он помещает новый элемент в найденную позицию.

Общее количество выполняемых шагов составляет 1 + 2 + 3 + ... + (N - 1), что

равно O(N2).

Пузырьковая сортировка

Пузырьковая сортировка (bubble sort) - это алгоритм, предназначенный для

сортировки списков, которые уже находятся в почти упорядоченном состоянии.

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

время порядка O(N). Если часть элементов находится не на своих местах, алгоритм

работает медленнее. Если элементы изначально расположены в произвольном по-

рядке, алгоритм выполняется за O(N2) шагов. По этой причине перед использова-

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

отсортированы.

При пузырьковой сортировке список просматривается до тех пор, пока не най-

дутся два смежных элемента, которые следуют не по порядку. Они меняется мес-

тами, и процедура продолжает исследовать список. Алгоритм повторяет этот про-

цесс, пока не упорядочит все элементы.

В примере, показанном на рис. 1, алгоритм сначала обнаруживает, что элемен-

ты 6 и 3 следуют не по порядку, и меняет их местами. Во время следующего прохо-

да алгоритм меняет элементы 5 и 3, в следующем - 4 и 3. После еще одного прохода

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

Можно проследить за перемещениями элемента, который первоначально был

расположен ниже, чем после сортировки, например элемента 3 на рис. 1. Во вре-

мя каждого прохода элемент перемещается на одну позицию ближе к своему ко-

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

к поверхности воды в стакане. Этот эффект и дал название алгоритму пузырько-

вой сортировки.

Рис. 1. «Всплытие» элемента

Соседние файлы в папке Iнформатика