- •1. Архитектура машинной памяти
- •2. Адресация памяти
- •3. Три уровня представления данных
- •4.Внутренняя структура записи
- •5. Типы структур данных
- •7. Массивы
- •8. Стеки
- •9.Очередь
- •10. Таблица
- •11. Способы размещения, основанные
- •12.Сортировка. Метод выбора
- •13. Метод обмена (пузырька)
- •14. Метод вставок
- •15. Метод подсчета
- •16. Метод Шелла
- •17.Внешняя сортировка
- •18. Последовательный поиск
- •19. Ускоренные методы поиска. Двоичный поиск. Блочный поиск
- •20.Поиск по двоичному дереву
14. Метод вставок
При использовании этого метода сортировки упорядоченная последовательность создается на свободном участке памяти. Под сортировку выделяется объем памяти, равный длине отсортированного массива записей. Так как исходная и упорядоченная последовательности располагаются в разных участках памяти, используем для их обозначения различные символы. Элементы исходной последовательности обозначим Аi, а элементы упорядоченной последовательности - Bj
Первый элемент А1 исходной последовательности А занимает первую позицию в свободном участке памяти, т.е. становится первым элементом B1 последовательности B. Элемент А2 сравнивается с В1. Если в результате сравнения оказалось, что А2< В1, то элемент B1 передвигается на одну позицию, а элемент А2 занимает его прежнее место. Теперь в свободном участке памяти размещены два элемента В1 и В2, образующих последовательность, упорядоченную по возрастанию значений ключа.
В течение каждого i-го прохода процесса сортировки элемент Ai сравнивается поочередно со всеми элементами последовательности В начиная с В1. При обнаруженииBj , большего Ai,элементы Bj,Bj+1, Bj+2...Bi-1
передвигаются на одну позицию, освобождая место для элемента Ai, который занимает j-ю позицию.
Последовательность из N элементов будет отсортирована за N проходов. В первом проходе сравнений не требуется, так как первый элемент просто размещается в первой ячейке памяти. В дальнейшем в течение каждого i-го прохода будет выполнено в худшем случае i -1 сравнение. Худшим окажется тот случай, когда исходная последовательность уже отсортирована в нужном порядке. Сmax= сумма (от i=1 до N-1)(N-i)=0.5N(N-1)
15. Метод подсчета
Упорядоченная последовательность В создается в свободной области памяти в результате сортировки исходной последовательности А. Метод основан на том, что (К + 1)-й элемент упорядоченной последовательности превышает ровно К элементов и, следовательно, занимает (К + 1)-ю позицию. В процессе сортировки на каждом i-м проходе i-й элемент исходной последовательности попарно сравнивается со всеми остальными элементами. Если в результате сравнения установлено, что Ai > Aj, то значение числа К увеличивается на единицу. По окончании прохода значение К оказывается равным числу элементов, меньших чем Аi. Номер позиции i-го элемента в последовательности В равен К+1.
Пример сортировки методом подсчета приведен на рис. 11.4. В результате первого прохода устанавливается, что первый элемент исходной последовательности А (1) = 10 оказался больше четырех элементов и для него устанавливается К = 4. Этот элемент займет пятую позицию в упорядоченной последовательности В. Аналогично определяются позиции всех остальных элементов последовательности.
Для сортировки последовательности из N элементов требуется N проходов, на каждом проходе выполняется N сравнений. Число проходов и сравнений не зависит от степени упорядоченности исходной последовательности . Поэтому ддя данного метода максимальное, минимальное и среднее число сравнений равно N2.
Рассмотренный алгоритм сортировки методом подсчета можно использовать лишь в тех случаях, когда в исходной последовательности отсутствуют одинаковые элементы, иными словами, когда в упорядочиваемом массиве нет записей с одинаковыми значениями ключей. Для сортировки массивов, имеющих записи с одинаковыми значениями ключей, алгоритм нужно модифицировать.