Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Гриценко, Методичка по информатике 3.11.2004.doc
Скачиваний:
2
Добавлен:
27.10.2018
Размер:
640.51 Кб
Скачать

7.5 Методы сортировок

  1. Сортировка методом пузырька с ограничением. Для каждого i-го элемента массива (i меняется от 2 до М) просматривают массив с конца (от К=М до К=i) попарно. В пару выбирают К-й и (К-1)-й элементы. Если (К-1)-й элемент больше К-го, то проводят обмен пары. Сортировка завершается, если для некоторого i не было проведено обменов.

  2. Шейкер-сортировка (не без метода пузырька). Шейкер-сортировка является модификацией сортировки методом пузырька. Здесь, как и в методе пузырька проводят попарно сравнение элементов и обмен в паре, если имеется необходимость, но первый проход осуществляется снизу вверх, второй сверху вниз и т.д. Иными словами меняют направление проходов. Переменная Н указывает направление прохода.

  3. Шейкер-сортировка (на базе метода пузырька с ограничением). Шейкер-сортировка является модификацией сортировки методом пузырька. Здесь, как и в методе пузырька с ограничением проводят попарно сравнение элементов и обмен в паре, если имеется необходимость, то первый проход осуществляется снизу вверх, второй сверху вниз, третий снизу вверх т.д. Иными словами меняют направление проходов. Переменная Н указывает направление прохода.

  4. Сортировка просмотром выбранного места. Организуют просмотр элементов массива, начиная с первого до (М-1)-го. Каждый выбранный элемент сравнивают со всеми следующими и, если какой-то из следующих меньше выбранного, то меняют местами, процесс сравнения продолжают.

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

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

  7. Сортировка массива. При каждом просмотре массива первый элемент сравнивают со вторым и меньший ставят на второе место. Второй элемент сравнивают с третьим и меньший ставят на второе место. Эта процедура повторяется до тех пор, пока не будет обработан весь массив. Затем совершают второй, третий и т.д. просмотры, пока во время просмотра не останется ни одной перестановки. Массив будет отсортирован по возрастанию.

  8. Сортировка по основанию системы счисления. Метод предполагает выделение отдельного элемента памяти для каждой цифры, а затем группировку чисел по цифрам в каждом последовательном проходе.

  9. Сортировка обменом по основанию системы счисления. Пусть L-количество двоичных разрядов кода элемента. Упорядочение ведут поразрядно. Сначала анализируют старший разряд. Отыскивают элемент с минимальным индексом I, который содержит в анализируемом разряде единицу, и элемент с максимальным индексом J, содержащий в анализируемом разряде нуль. При этом если I>J, то эти элементы меняют местами и процесс продолжают. Если I<=J, то упорядочение по данному разряду закончено. В результате сортируемый массив разделен на две группы элементов. Любой элемент в первой группе имеет меньшее значение, чем во второй. Затем при анализе второго разряда одну из полученных групп вновь делят на две подгруппы и т.д. Процесс продолжают до окончания анализа всех разрядов кода элемента или до остатка в каждой группе по одному элементу.

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

  11. Сортировка методом квадратичной выборки. Массив, состоящий из М элементов, разбивают на SQRT(M) групп по SQRT(M) элементов в каждой. В результате сплошного просмотра в каждой группе находят и заносят в рабочие переменные элементы с наименьшими значениями. Затем просматривают переменные и переменную с наименьшим значением заносят в выходной массив. После этого осуществляют поиск наименьшего элемента в той группе, из переменной которой элемент был перенесен в выходной массив. Процесс повторяют. При каждом занесении элемента в переменную ее стирают в основном массиве.

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

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

  14. Сортировка с помощью поиска минимального и максимального элементов подмассива. Вначале за один просмотр находят максимальный и минимальный элементы массива. Максимальный помещают в конец массива, а минимальный в его начало. Затем среди оставшихся элементов вновь находят за один просмотр максимальный и минимальный элементы и помещают соответственно на предпоследнее и второе место в массиве. Процесс продолжают до тех пор, пока не будет исчерпан весь массив. В блок-схеме L-индекс максимального элемента, N-индекс минимального элемента.

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

  16. Модификация сортировки методом вставки. В этом варианте поиск подходящего места ведут от первого элемента отсортированной части к выбранному элементу. После определения места вставки осуществляют сдвиг всех элементов от места вставки до последнего перед выбранным элементом на одну позицию вправо, а затем осуществляют вставку.

  17. Сортировка методом Шелла. В основе метода Шелла лежит свойство метода вставки, быстрая обработка частично упорядоченных массивов, использование для упорядочения не всего массива, а некоторой группы элементов. При этом размеры групп постепенно увеличивают, но количество их уменьшают. Сущность метода Шелла заключается в следующем. Сначала выбирают шаг группы по правилу d[1] = 2^L + 1 < M, где 2^L < M <= 2^(L+1), и методом вставки последовательно сортируют группы записей с номерами К, К+d[1], K+2d[1],..., K+nd[1]<=M, где для первой группы К=1, для последующих групп К=2,..., d[1]. После окончания упорядочения всех групп выбирают новый шаг группы: d[p] = d[p-1]/2, и процедуру повторяют.

  18. Вероятностная сортировка. Это вариант метода вставки, в котором поиск в отсортированной части ведут так: вместо деления пополам интервала на каждом этапе поиска обращаемся к случайно выбранным элементам с равными вероятностями. Для этой цели используют датчики случайных чисел, равномерно распределенных на интервале от 0 до 1. Для пересчета случайного числа на интервал [L,B] используют следующую формулу: Z = L + N(B L), где Z - случайное число в интервале [L,B]; N - случайное число в интервале [0,1].

  19. Быстрая сортировка Хоара (рекурсивный вариант). Делают предположение, что первый элемент массива является средним по отношению к остальным. На основе такого предположения все элементы разбивают на две группы: большую предполагаемого среднего и меньшую. Затем обе группы отдельно сортируют тем же методом. Это можно сделать "на месте", если одновременно просматривать сверху в поисках ключа большего, чем предполагаемый средний, и снизу в поисках меньшего, чем средний. Каждый раз, когда найдены больший сверху и меньший снизу, их меняют местами. Наконец, когда оба просмотра (идущие соответственно сверху и снизу) встретятся, первый элемент вставляют между этими двумя группами.