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

1. Цей метод звичайно використовують гравці в карти. Елементи (карти) умовно розділяються на впорядковану послідовність a1,...,ai-1 і вхідну послідовність ai,...,an, яку потрібно впорядкувати. На кожному кроці, починаючи з другого, беруть поточний елемент невпорядкованої частини і передають у впорядковану  послідовність, уставляючи його на підходяще місце.  Вставка здійснюється “посуванням” елементів впорядкованої послідовності на певну кількість кроків вправо. Посування закінчується при виконання однієї з двох умов:

· знайдено елемент aj із ключем меншим, чим ключ x (елемента, який впорядковується);

· досягнутий лівий кінець готової послідовності.

Оскільки наперед кількість таких “посувань” невідома, для практичної реалізації алгоритму доцільно застосувати цикл з передумовою. Застосування методу розглянемо на прикладі впорядкування масиву з 10 елементів. Елементи, що переміщувались вправо, виділимо кольором.

Вихідний масив:

44  55  12  42  94  18  06  67  32  13

Перший крок: переставляється елемент х=12

44  55  55  42  94  18  06  67  32  13

44  44  55  42  94  18  06  67  32  13

12  44  55  42  94  18  06  67  32  13

Другий  крок: переставляється елемент х=42

12  44  55  55  94  18  06  67  32  13

12  44  44  55  94  18  06  67  32  13

12  42  44  55  94  18  06  67  32  13

Третій  крок: переставляється елемент х=18

12  42  44  55  94  94  06  67  32  13

12  42  44  55  55  94  06  67  32  13

12  42  44  44  55  94  06  67  32  13

12  42  42  44  55  94  06  67  32  13

12  18  42  44  55  94  06  67  32  13

….

Процедуроа реалізації алгоритму має вигляд:

procedure straightinsertion (var a: massiv);

var

i,j: integer;

x: integer;

n1,n:integer;

begin

{границі масиву}

n1:= low(a);

n:= high(a);

{впорядкування}

for i:= n1+1 to n do

begin

x:=a[i];

j:=i-1;

while (j>=L) and (a[j]>x) do

  begin

  a[j+1]:=a[j];

  j:=j-1;

  end;

  a[j+1]:=x;

end;

end;

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 
25 26 27 28  Наверх ↑