Функция сортировки с помощью метода прямого включения

void insertionSort(int numbers[], int array_size)

{

int i, j , index;

for (i=l; i < array_size; i++)

{

index = numbers[i];

j = i;

while ((j > 0) && (numbers[j-1] > index))

{

numbers[j] = numbers[j-1];

j = j - i; }

numbers[j] = index; } }

Анализ алгоритма.Число сравнений ключей Сг при г-м просеивании составляет самое большое /-1, самое меньшее 1. Если предположить, что все перестановки из п ключей равновероятны, то среднее число сравнений — г/2. Число пересылок Mt равно Сг+2. Поэтому общее число сравнений и пересылок таковы [3]:

Ccp = {n2 + n- 2)1 A; Mcp = (n2+9n-)/4; Cmax = (n2 + n- 4)/4; Mmin = (n2 + Ъп- 4)/2.

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

Резюме: сортировка методом прямого включения — не очень подходящий метод для ЭВМ, так как включение элемента с последующим сдвигом на одну позицию целой группы элементов неэффективно.