
- •1.1Алгоритмы сортировки данных
- •1.1.1Методы внутренней сортировки
- •1.1.1.1Метод выбора
- •1.1.1.2Метод обмена
- •1.1.1.3Сортировка вставками
- •1.1.1.4Метод подсчета
- •1.1.1.5Метод Шелла
- •1.1.1.6Быстрая сортировка
- •1.1.1.6.1Краткое описание алгоритма
- •1.1.1.6.2Алгоритм
- •1.1.1.6.3Оценка эффективности
- •1.1.1.6.4Улучшения
- •1.1.1.6.5Достоинства и недостатки
- •1.1.1.7Пирамидальная сортировка
- •1.1.1.7.1Понятие пирамиды
- •1.1.1.7.2Просеивание вверх
- •1.1.1.7.3Просеивание вниз
- •1.1.1.7.4Построение пирамиды
- •1.1.1.8Сортировка слиянием
- •1.1.1.8.1Процедура слияния
- •1.1.1.8.2Сортировка слиянием
- •1.1.2Методы внешней сортировки
- •1.1.2.1Сбалансированное n-ленточное слияние
- •1.1.3Факторы, учитываемые при выборе метода сортировки.
- •2Размещение данных, основанное на преобразовании кода записи в ее адрес
- •2.1Хеширование данных
- •2.2Методы разрешения коллизий
- •2.3Переполнение таблицы и рехеширование
1.1.1.3Сортировка вставками
Основная идея сортировки вставками состоит в том, что при добавлении нового элемента в уже отсортированный список его стоит сразу вставлять в нужное место вместо того, чтобы вставлять его в произвольное место, а затем заново сортировать весь список.
Первый элемент А1 исходной последовательности образует уже отсортированный список. Элемент А2 сравнивается с A1. Если в результате сравнения оказалось, что А2 < A1, то элемент A1 передвигается на одну позицию, а элемент А2 занимает его прежнее место. Теперь отсортированный список включает два элемента A1 и A2, образующих последовательность, упорядоченную по возрастанию значений ключа.
В течение каждого i-го прохода процесса сортировки элемент Ai сравнивается поочередно со всеми элементами, уже составляющими отсортированную последовательность (элементы на позициях с 1 по i-1 списка A), начиная с последнего элемента отсортированной последовательности. Если добавляемый элемент Ai меньше элемента Aj, то элемент Aj перемещается на одну позицию вправо. При обнаружении Aj, меньшего Ai, элемент Ai занимает свободное место j+1 в отсортированной последовательности.
Среднее число сравнений пропорционально 0,25N2. Минимальное число перестановок равно нулю, и будет это в том случае, когда исходная последовательность уже упорядочена. Среднее число перестановок пропорционально 0,25N2.
Алгоритм сортировки вставками приведен ниже:
list – сортируемый список элементов
N – число элементов в списке
for i=2 to N do
newElement = list[i]
location = i-1
while(location >= 1 and list[location] > newElement) do
list[location+1] = list[location]
location = location - 1
end while
list[location+1] = newElement
end for
1.1.1.4Метод подсчета
При использовании этого метода сортировки упорядоченная последовательность B создается на свободном участке памяти. Метод основан на том, что (К + 1)-й элемент упорядоченной последовательности превышает ровно К элементов и, следовательно, занимает (К + 1)-ю позицию. В процессе сортировки на каждом i-м проходе i-й элемент исходной последовательности A попарно сравнивается со всеми остальными элементами. Если в результате сравнения установлено, что Ai > Аj, то значение счетчика К увеличивается на единицу. Первоначально счетчик K инициализируется нулем. По окончании прохода счетчик К показывает число элементов, меньших чем Аi. Соответственно элемент Аi в последовательности В занимает позицию К+1.
Для данного метода максимальное, минимальное и среднее число сравнений равно N2.
Рассмотренный алгоритм сортировки методом подсчета можно использовать лишь в тех случаях, когда в исходной последовательности отсутствуют одинаковые элементы, иными словами, когда в упорядочиваемом массиве нет записей с одинаковыми значениями ключей. Для сортировки массивов, имеющих записи с одинаковыми значениями ключей, алгоритм нужно модифицировать.
Алгоритм метода подсчета приведен ниже:
list – сортируемый список элементов
N – число элементов в списке
newList – отсортированный список элементов
for i=1 to N do
k = 0
for j=1 to N do
if(list[i] > list[j]) then
k = k + 1
end if
end for
newList[k+1] = list[i]
end for