Простейшие методы сортировки: метод вставок


Данный метод также относится к классу простейших, но по сравнению с методом пузырька имеет немного лучшие показатели.

Пусть имеется n элементов а1 а2, а3, . . ., аn, расположенных в ячейках массива. Сортировка выполняется за (n–1) шаг, причем шаги удобно нумеровать от 2 до n. На каждом i-ом шаге обрабатываемый набор разбивается на 2 части:

· левую часть образуют уже упорядоченные на предыдущих шагах элементы а1, а2, а3, . . ., аi-1

· правую часть образуют еще не обработанные элементы аi, аi+1, аi+2, . . ., аn

На шаге i для элемента аi находится подходящее место в уже отсортированной последовательности. Поиск подходящего места выполняется поэлементными сравнениями и перестановками по необходимости: сравниваем аi с аi-1, если аi < аi-1, то переставляем их, потом сравниваем аi-1 с аi-2 и т. д. Сравнения и, возможно, перестановки продолжаются до тех пор, пока не будет выполнено одно из 2-х следующих условий:

· в отсортированном наборе найден элемент, меньший аi (все остальные не просмотренные элементы будут еще меньше)

· достигнут первый элемент набора а1, что произойдет в том случае, если аi меньше всех элементов в отсортированном наборе и он должен занять первое место в массиве

Пример. Возьмем тот же исходный набор целых чисел: 15-33-42-07-12-19

  а1 а2 а3 а4 а5 а6 Выполняемые операции
шаг 2 сравнение 15 и 33, обмена нет, 15 – пока первый
шаг 3 сравнение 33 и 42, обмена нет, 15 и 33 пока первые
шаг 4 сравнение 07 и 42, меняем их
сравнение 07 и 33, меняем их
сравнение 07 и 15, меняем их; 07-15-33 пока первые
шаг 5 сравнение 12 и 42, меняем их
сравнение 12 и 33, меняем их
сравнение 12 и 15, меняем их
сравнение 12 и 07, обмена нет, пока: 07-12-15-33
шаг 6 сравнение 19 и 42, меняем их
сравнение 19 и 33, меняем их
сравнение 19 и 15, обмена нет, все готово

 

Для данного примера было сделано 12 сравнений и 8 перестановок, что чуть лучше предыдущего метода. В среднем, число сравнений по данному методу примерно в 2 раза меньше, чем в методе пузырька, оставаясь тем не менее пропорциональным величине n2. Наилучший результат этот метод показывает для уже упорядоченного исходного массива – всего (n-1) сравнение.

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

for i := 2 to n do

Begin

temp := a [i]; j := i – 1;

While (j > 0) and (temp < a [j] ) do

begin a [j+1] := a [j]; j := j – 1; end;

a [j+1] := temp;

end;

 

 



Дата добавления: 2020-07-18; просмотров: 403;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.