Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OTVET_OAIP.docx
Скачиваний:
22
Добавлен:
27.09.2019
Размер:
589.57 Кб
Скачать

5. Сортировка подсчётом. Сортировка выбором (прямой выбор, линейный выбор, квадратичная )

СОРТИРОВКА ПОДСЧЁТОМ — алгоритм сортировки, в котором используется диапазон чисел сортируемого массива (списка) для подсчёта совпадающих элементов. Применение сортировки подсчётом целесообразно лишь тогда, когда сортируемые числа имеют (или их можно отобразить в) диапазон возможных значений, который достаточно мал по сравнению с сортируемым множеством, например, миллион натуральных чисел меньших 1000. Эффективность алгоритма падает, если при попадании нескольких различных элементов в одну ячейку, их надо дополнительно сортировать. Необходимость сортировки внутри ячеек лишает алгоритм смысла, так как каждый элемент придётся просматривать более одного раза.

ПРЯМАЯ ВЫБОРКА. Согласно этому методу, начиная с первой записи таблицы, осуществляется поиск элемента, имеющего наименьшее значение ключа. После того, как этот элемент найден, он меняется местами с первой записью в таблице. В результате такой перестановки запись с наименьшим значением ключа помещается в первую позицию в таблице. Затем, начиная со второго элемента таблицы, осуществляется поиск второго наименьшего ключа. Найденный элемент меняется местами со вторым элементом таблицы. Этот процесс продолжается до тех пор, пока все записи не будут расположены в порядке возрастания кодов ключа. Число сравнений в данном методе равно n(n-1)/2 (в среднем порядка n**2),где n - количество записей в таблице. Максимальное количество перестановок при такой сортировке равно (n-1).

СОРТИРОВКА КВАДРАТИЧНОЙ ВЫБОРКОЙ.

Данный метод по сравнению с сортировкой выборкой уменьшает число сравнений, но требует дополнительного объема памяти. Сортируемая таблица, состоящая из n элементов, разделяется на n групп по sqrt(n) элементов в каждой. Если n не является точным квадратом, то таблица разделяется на n' групп, где n' есть ближайший точный квадрат, больший n. В каждой группе выбирается наименьший элемент, который пересылается во вспомогательный список. Вспомогательный список просматривается, и наименьший его элемент пересылается в зону вывода (в зоне вывода формируется отсортированный список). Далее из группы, содержащей элемент, посылаемый в зону вывода, выбирается новый наименьший элемент, который помещается во вспомогательный список. Затем другой просмотр вспомогательного списка выбирает новый наименьший элемент, который является вторым по величине во всем списке. Он пересылается в зону вывода. Элементы групп, которые уже посланы во вспомогательный список, заменяются большими фиктивными величинами.

Количество действий, требуемое для сортировки квадратичной выборкой, несколько меньше, чем в предыдущих методах Q= N*N, но требуется дополнительная память для хранения списка G.

Общее число сравнений для случая точного квадрата равно приблизительно 2n*sqrt(n), необходимый резерв памяти - поле длиной (n+sqrt(n)) элемент.

ЛИНЕЙНАЯ ВЫБОРКА С ПОДСЧЁТОМ. Суть сортировки заключается в том, что для каждого элемента массива считается количество элементов, которые меньше его. Это число является индексом этого элемента в новом (сортированном) массиве.

6. Сортировка вставками. Простая сортировка, вставка погружением, метод Шелла. Сортировка вставками. Сортировка вставками — простой алгоритм сортировки. Хотя этот алгоритм сортировки уступает в эффективности более сложным (таким как быстрая сортировка), у него есть ряд преимуществ: 1.эффективен на небольших наборах данных, на наборах данных до десятков элементов может оказаться лучшим;2.эффективен на наборах данных, которые уже частично отсортированы;3.это устойчивый алгоритм сортировки (не меняет порядок элементов, которые уже отсортированы);4.может сортировать список по мере его получения;5.использует O(1) временной памяти, включая стек. Минусом же является высокая сложность алгоритма: O(n²). Описание: На каждом шаге алгоритма мы выбираем один из элементов входных данных и вставляем его на нужную позицию в уже отсортированном списке, до тех пор, пока набор входных данных не будет исчерпан. Метод выбора очередного элемента из исходного массива произволен; может использоваться практически любой алгоритм выбора. Обычно (и с целью получения устойчивого алгоритма сортировки), элементы вставляются по порядку их появления во входном массиве. ПРОСТАЯ СОРТИРОВКА. Определяется место в отсортированной части массива, куда должен помещаться элемент. Элементы от данной позиции сдвигаются вверх и на освободившееся место помещается элемент. Трудоемкость алгоритма при линейном поиске -n*n/4. Если используется двоичный поиск для определения места элемента, то трудоемкость алгоритма составляет n*log(n). Однако эта трудоемкость не учитывает затрат на перемещение элементов при сдвиге. Естественным образом простые вставки выполняются в линейных списках.

ВСТАВКА ПОГРУЖЕНИЕМ. Очередной элемент путем ряда обменов “погружается” до требуемой позиции в уже упорядоченную часть массива.

СОРТИРОВКА ШЕЛЛА. Метод состоит в том, что упорядочиваемая таблица разделяется на группы элементов, каждая из которых упорядочивается методом вставки. В процессе упорядочения размеры таких групп увеличиваются до тех пор, пока все элементы таблицы не войдут в упорядоченную группу. Выбор очередной упорядочиваемой группы и ее расположение внутри таблицы производятся так, чтобы можно было использовать предшествующую упорядоченность. Группой называют последовательность элементов, номера которых образуют арифметическую прогрессию с разностью h (h называют шагом группы). В начале процесса упорядочения выбирается первый шаг группы h1, который зависит от размера таблицы. Шелл предложил брать h1=[n/2], а hi=h((i-1)/2). В более поздних работах Хиббард показал, что для ускорения процесса целесообразно определить шаг h1 по формуле: h1=2**k+1 , где 2**k < n <= 2**(k+1). После выбора h1 методом вставки упорядочиваются группы, содержащие элементы с номерами позиций i, i+h1, i+2*h1, ..., i+mi*h1.При этом i=1,2,...,h1; m[i] - наибольшее целое, удовлетворяющее неравенству i+m[i]*hi<= n. Затем выбирается шаг h2<h1 и упорядочиваются группы, содержащие элементы с номерами позиций i, i+h2, ..., i+m[i]*h2. Эта процедура со все уменьшающимися шагами продолжается до тех пор, пока очередной шаг h[l] станет равным единице (h1>h2>...>hl). Этот последний этап представляет собой упорядочение всей таблицы методом вставки. Но так как исходная таблица упорядочивалась отдельными группами с последовательным объединением этих групп, то общее количество сравнений значительно меньше,чем n /4, требуемое при методе вставки. Число операций сравнения пропорционально n*(log2(n))**2 .

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