Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы сортировки данных.doc
Скачиваний:
1
Добавлен:
29.06.2024
Размер:
429.57 Кб
Скачать

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