Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
инф. технологии_1.doc
Скачиваний:
21
Добавлен:
29.03.2015
Размер:
1.17 Mб
Скачать

5.2.2.5. Сортировка массивов.

5.2.2.5.1.Сортировка вставкой

Массив разделяется на две части: отсортированную и неотсортированную. Элементы из неотсортированной части поочередно выбираются и вставляются в отсортированную часть так, чтобы не нарушить в ней упорядочность элементов.

В начале работы алгоритмы в качестве отсортированной части массива принимают только один первый элемент, а в качестве неотсортированной части – все остальные элементы.

Таким образом, алгоритм будет состоять из n – 1-го прохода (n – размерность массива), каждый из которых будет включать четыре действия:

Взятие очередного i-го неотсортированного элемента и сохранение его дополнительной переменной.

Поиск позиции j в отсортированной части массива, в которой присутствие взятого элемента не нарушит упорядоченности элементов.

Сдвиг элементов массива от i – 1-го до j-го вправо, чтобы освободить найденную позицию вставки.

Вставка взятого элемента в найденную j-ю позицию.

1шаг:

3

1

9

2

5

7

1

2шаг:

1

3

9

2

5

7

9

3шаг:

1

3

9

2

5

7

2

4шаг:

1

2

3

9

5

7

5

5шаг:

1

2

3

5

9

7

7

Результат:

1

2

3

5

7

9

БЛОК – СХЕМА

I = 2

 1

J = 1

R = A(I)

IR =

 1

I = I + I

1

IR = 1

1

K = I - 1

J = J+1

1

A(J) = R

IR = 2

A(K+1) = A(K)

K = K - 1

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

Program Insertion Sort;

Uses Crt;

Const

n =10; {длина массива}

type

TVector = array 1…n of Real;

Var

Vector : TVector;

B : Real;

i, j, K : Integer;

Begin

ClrScr;

Writeln (‘Введите элементы массива:’);

For i:=1 to n do Read (Vector i); Readln;

{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - }

for i:=2 to n do

begin

B:=Vector i; {взятие неотсортированного элемента}

{цикл поиска позиции вставки}

j:=1

While (BVector j ) do

j:= j+1 {после окончания цикла индекс j фиксирует позицию}

{вставк} {цикл сдвига элемента для освобождения позиции вставки}

for K:= i-1 downto j do

Vector K+1: = Vector K;

{Вставка взятого элемента на найденную позицию}

Vector j: = B;

End;

{ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - }

Writein (‘Отсортированный массив:’);

For i: = 1 to n do write (‘vector [i] : 8 : 2);

Writeln;

End.