Сортировка методом простого включения

Слайд 2

Сортировка методом простого включения Алгоритм: (на примере сортировки по убыванию) На

Сортировка методом простого включения

Алгоритм: (на примере сортировки по убыванию)
На k-ом шаге

считаем, что часть массива, содержащая первые k-1 элементов уже упорядочена, то есть a[1] >= a[2] >= ... >= a [k-1]
Берем k-ый элемент и подбираем для него место в отсортированном массиве такое, чтобы после его вставки упорядоченность не нарушилась. То есть необходимо найти j, которое удовлетворяло бы условиям: 1<=j<=k-1, a[j] >= a[k] >= a[j+1]
Вставляем элемент a[k] на найденное место.
Слайд 3

for k := 2 to n do begin x := a[k];

for k := 2 to n do
begin
x :=

a[k];
{вставить х на подходящее место в
a[1] >= a[2] >= ... >= a [k-1]}
end;
Как найти подходящее место для Х?
Слайд 4

Алгоритм: Просматриваем элементы массива (упорядоченного), двигаясь от конца к началу массива

Алгоритм:
Просматриваем элементы массива (упорядоченного), двигаясь от конца к началу массива

(то есть от k-1 до 1)
Просматриваем пока не будет выполнено одно из условий:
найдем a[j]достигнут левый конец упорядоченной части массива (тогда необходимо х вставить на 1-е место)
Пока условия 2 не выполнены будем смещать просматриваемые элементы на 1 позицию вправо, в результате чего в отсортированной части будет освобождено место под Х.
Слайд 5

for k := 2 to n do begin x := a[k];

for k := 2 to n do
begin
x := a[k]; j

:= k-1;
while (j>0) and (x >= a[j]) do
begin
a[j+1] := a[j]; j := j - 1;
end;
a[j+1]:=x
end;
Слайд 6

Будет ли сортировка выполняться правильно, если в заголовке цикла while указать

Будет ли сортировка выполняться правильно, если в заголовке цикла while указать

x > a[j]?
Сколько при данном методе сортировки производится сравнений в лучшем и худшем случаях?
В алгоритме сортировки массива необходимо было искать место вставки очередного элемента в отсортированную часть. Использование для этого бинарного поиска позволяет значительно улучшить степень эффективности сортировки. Такой модифицированный алгоритм сортировки называют методом бинарного включения. Напишите программу, реализующую этот метод.
Слайд 7

Да. Просто равные элементы будут вставляться не до соответствующего равного, а после. от n-1 до n*(n-1)/2

Да. Просто равные элементы будут вставляться не до соответствующего равного, а

после.
от n-1 до n*(n-1)/2
Слайд 8

for i:= 2 to n do if a[i-1]>a[i] then begin x:=

for i:= 2 to n do
if a[i-1]>a[i] then begin
x:=

a[i]; left:= 1; right:= i-1;
repeat
m:= (left+right)div 2;
if a[m] left:= m+1 else right:= m-1; until left>right;
for j:= i-1 downto left do
a[j+1]:= a[j]; a[left]:= x;
end;