1. i = 2

2 Переносим элемент х=аi из входной подпоследовательности в готовую так, чтобы последняя осталась под сортированной. Для этого:

а) организуем бинарный поиск места включения х в готовую подпоследовательность: находим срединный элемент готовой подпоследовательности – am, где m =] i/2 (, и сравниваем его с х. Если am > х то ведем далее поиск в левой половине готовой подпоследовательности, т.е. опять находим срединный элемент и сравниваем его с х и т.д., пока не найдем номер j такой, что ai <=x < ai+1, иначе аналогично ведем поиск в правой половине готовой подпоследовательности;

б) если j=j-1, то переходим к пункту в), иначе расширяем готовую подпоследовательность справа, сдвигая ее элементы, начиная с ai вправо;

в) ai+1 = х

3. i=i+1. Если i <= n, то переходим к п. 2, иначе сортировка заканчивается.

Деление пополам производится i*log2i. Число сравнений практически не зависит от начального порядка элементов. В нижней части последовательности место включения отыскивается несколько быстрее, чем в верхней, поэтому предпочтительна ситуация, когда элементы немного упорядочены. Фактически, если элементы в обратном порядке, потребуется минимальное число сравнений, если уже упорядочены – максимальное:

C≈n*log2(log2-log2e±0,5). Однако число пересылок так и остается порядка n2. И на самом деле сортировка уже упорядоченного массива потребует больше времени, чем метод с прямыми включениями (см. [1]).

2.3 Выбор структур данных

Алгоритмы сортировки очень сильно зависят от структуры данных, так что выделяют два класса: сортировку массивов и сортировку последовательностей (файлов). В данной работе рассматривается сортировка массивов. Тип данных «массив» удобен тем, что хранится во внутренней памяти и имеет случайный доступ к элементам, то есть более быстрый, чем у последовательности. Поэтому массивы целесообразно использовать для хранения небольших, часто используемых множеств.

Обычно упорядочивающая функция не вычисляется по какому-либо правилу, а хранится как явная компонента (поле) каждого элемента. Её значение называется ключом элемента. Поэтому для представления элемента хорошо подходит тип «запись», что на языке «Pascal» выглядит следующим образом:

TYPE item = RECORD key: INTEGER;

{здесь описаны другие компоненты}

END;

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

Из выше сказанного следует, что в процессе работы потребуются следующие переменные:

n – количество элементов массива;

A – сортируемый массив;

i – переменная цикла (по исходной последовательности);

j – переменная внутреннего цикла (по готовой последовательности);

x – i-й ключ (переносимый элемент).

Все переменные целого типа.

2.4 Описание схемы алгоритма

Блок-схема данного алгоритма изображена на рис. 2 в Приложении.

Алгоритм работает следующим образом. Сначала вводятся исходные данные: длина массива и его элементы (блоки 1, 2), затем организуется цикл по всей длине массива, во время которого ставится «барьер» (блок 3) и проводится сравнение i-го ключа с элементами готовой последовательности (стоящими раньше него). При этом все элементы, большие этого ключа (это условие проверяется в блоке 4), сдвигаются вправо (блок 5). Это происходит до тех пор, пока не встретится элемент меньший либо равный данному ключу (по крайней мере барьеру). Тогда i-й ключ вставляется в эту позицию (блок 6).

2.5 Контрольные примеры решения задачи с помощью алгоритма сортировки простыми включениями

Пример сортировки массива, отсортированного случайным образом.

Пусть задан такой массив из восьми элементов: (32,43,2,30,82,8,5,52) (см. Таб. 1).

Начальные ключи 32 43 02 30 82 08 05 52
i = 2 32 43 02 30 82 08 05 52
i = 3 02 32 43 30 82 08 05 52
i = 4 02 30 32 43 82 08 05 52
i = 5 02 30 32 43 82 08 05 52
i = 6 02 08 30 32 43 82 05 52
i = 7 02 05 08 30 32 43 82 52
i = 8 02 05 08 30 32 43 52 82

Пошаговое решение:

Шаг 1:

1)         i=2;

2)         x=43; a[0]=43; j=1;

3) x > a[j]=32;

3.2) a[2]= 43;

4) i=3; i ≤ n=8 → п. 2;

Шаг 2:

2) x=2; a[0]=2; j=2;

3) x < a[j]=43;

3.1) a[3]=43; j=1; → п. 3;

3) x < a[j]=32;

3.1) a[2]=32; j=0; → п. 3;

3) x = a[j];

3.2) a[1]=2;

4) i=4; i<n → п. 2;

Шаг 3:

2) x=30; a[0]=30; j=3;

3) x < a[j]=43;

3.1) a[4]=43; j=2; → п. 3;

3) x < a[j]=32;

3.1) a[3]=32; j=1; → п. 3;

3) x > a[1]=2

3.2) a[2]=30;

4) i=5; i<n → п. 2;

Шаг 4:

2) x=82; a[0]=82; j=4;

3) x > a[j];

3.2) a[5] = 82;

4) i=6; i<n → п. 2;

Шаг 5:

2) x=8; a[0]=8; j=5;

3) x < a[j]=82;

3.1) a[6]=82; j=4; → п. 3;

3) x < a[j]=43;

3.1) a[5]=43; j=3; → п. 3;

3) x < a[j]=32;

3.1) a[4]=32; j=2; → п. 3;

3) x < a[j]=30;

3.1) a[3]=30; j=1; → п. 3;

3) x > a[j]=2;

3.2) a[2]=8;

4) i=7; i<n → п. 2;

Шаг 6:

2) x=5; a[0]=5; j=6;

3) x < a[j]=82;

3.1) a[7]=82; j=5; → п. 3;

3) x < a[j];

3.1) a[6]=43; j=4; → п. 3;

3) x < a[j]=32;

3.1) a[5]=32; j=3; → п. 3;

3) x < a[j]=30;

3.1) a[4]=30; j=2; → п. 3;

3) x < a[j]=8;

3.1) a[3]=8; j=1; → п. 3;

3) x > a[j]=2;

3.2) a[2]=5;

4) i=8; i≤n → п. 2;

Шаг 7:

2) x=52; a[0]=52; j=7;

3) x < a[j]=82;

3.1) a[8]=82; j=6; → п. 3;

3) x > a[j]=43;

3.2) a[7]=52;

4) i=9; i>n → конец алгоритма.

Таким образом, имеем 21 пересылку элементов и 20 сравнений.

Пример сортировки уже отсортированного массива.

Пусть задан такой массив из восьми элементов: (2,5,8,30,32,43,52,82).

Пошаговое решение:

Шаг 1:

1) i=2;

2) x=5; a[0]=2; j=1;

3) x > a[j]=2;

3.2) a[2]=5;

4) i=3; i<n → п. 3;

Шаг 2:

2) x=8; a[0]=8; j=2;

3) x > a[j]=5;

3.2) a[3]=8;

4) i=4; i<n → п. 3;

Шаг 3:

2) x=30; a[0]=30; j=3;

3) x > a[j]=8;

3.2) a[4]=30;

4) i=5; i<n → п. 3;

Шаг 4:

2) x=32; a[0]=32; j=4;

3) x > a[j]=30;

3.2) a[5]=32;

4) i=6; i<n → п. 3;

Шаг 5:

2) x=43; a[0]=43; j=5;

3) x > a[j]=32;

3.2) a[6]=43;

4) i=7; i<n → п. 3;

Шаг 6:

2) x=52; a[0]=52; j=6;

3) x > a[j]=43;

3.2) a[7]=52;

4) i=8; i≤n → п. 3;

Шаг 7

2) x=82; a[0]=82; j=7;

3) x > a[j]=52;

3.2) a[8]=82;

4) i=9; i>n →конец алгоритма.

Таким образом получили 7 пересылок и 7 сравнений.

Пример сортировки массива, отсортированного в обратном порядке.

Пусть задан такой массив из восьми элементов: (82,52,43,32,30,8,5,2).

Пошаговое решение:

Шаг 1:

1) i=2;

2) x=52; a[0]=52; j=1;

3) x< a[j]=52;

3.1) a[2]=82; j=0; → п. 3;

3) x=a[j];

3.2) a[1]=52;

4) i=3; i<n → п. 2;

Шаг 2:

2) x=43; a[0]=43; j=2;

3) x < a[j]=82;

3.1) a[3]=82; j=1; → п. 3;

3) x < a[j]=52;

3.1) a[2]=52; j=0; → п. 3;

3) x = a[j];

3.2) a[1]=43;

4) i=4; i<n → п. 2;

Шаг 3:

2) x=32; a[0]=32; j=3;

3) x < a[j]=82;

3.1) a[4]=82; j=2; → п. 3;

3) x < a[j]=52;

3.1) a[3]=52; j=1; → п. 3;

3) x < a[j]=43;

3.1) a[2]=43; j=0; → п. 3;

3) x=a[j];

3.2) a[1]=32;

4) i=5; i<n → п. 2;

Шаг 4:

2) x=30; a[0]=30; j=4;

3) x < a[j]=82;

3.1) a[5]=82; j=3; → п. 3;

3) x < a[j]=52;

3.1) a[4]=52; j=2; → п. 3;

3) x < a[j]=43;

3.1) a[3]=43; j=1; → п. 3;

3) x < a[j]=32;

3.1) a[2]=32; j=0; → п. 3;

3) x=a[j];

3.2) a[1]=30;

4) i=6; i<n → п. 2;

Шаг 5:

2) x=8; a[0]=8; j=5;

3) x < a[j]=82;

3.1) a[6]=82; j=4; → п. 3;

3) x < a[j]=52;

3.1) a[5]=52; j=3; → п. 3;

3) x < a[j]=43;

3.1) a[4]=43; j=2; → п. 3;

3) x < a[j]=32;

3.1) a[3]=32; j=1; → п. 3;

3) x < a[j]=30;

3.1) a[2]=30; j=0; → п. 3;

3) x=a[j];

3.2) a[1]=8;

4) i=7; i<n → п. 2;

Шаг 6:

2) x=5; a[0]=5; j=6;

3) x < a[j]=82;

3.1) a[7]=82; j=5; → п. 3;

3) x < a[j]=52;

3.1) a[6]=52; j=4; → п. 3;

3) x < a[j]=43;

3.1) a[5]=43; j=3; → п. 3;

3) x < a[j]=32;

3.1) a[4]=32; j=2; → п. 3;

3) x < a[j]=30;

3.1) a[3]=30; j=1; → п. 3;

3) x < a[j]=8;

3.1) a[2]=8; j=0; → п. 3;

3) x=a[j];

3.2) a[1]=5;

4) i=8; i<n → п. 2;

Шаг 7:

2) x=2; a[0]=2; j=7;

3) x < a[j]=82;

3.1) a[8]=82; j=6; → п. 3;

3) x < a[j]=52;

3.1) a[7]=52; j=5; → п. 3;

3) x < a[j]=43;

3.1) a[6]=43; j=4; → п. 3;

3) x < a[j]=32;

3.1) a[5]=32; j=3; → п. 3;

3) x < a[j]=30;

3.1) a[4]=30; j=2; → п. 3;

3) x < a[j]=8;

3.1) a[3]=8; j=1; → п. 3;

3) x < a[j]=5;

3.1) a[2]=5; j=0; → п. 3;

3) x=a[j];

3.2) a[1]=2;

4) i=9; i>n → конец алгоритма.

Таким образом, имеем 35 сравнений и 35 пересылок.



Информация о работе «Алгоритмы сортировки, поиска длиннейшего пути во взвешенном графе и поиска покрытия, близкого к кратчайшему»
Раздел: Информатика, программирование
Количество знаков с пробелами: 32842
Количество таблиц: 5
Количество изображений: 1

Похожие работы

Скачать
25995
5
1

... 6) + 1 =(509 mod 6) + 1 = 5 + 1=6; Алгоритм на графах: поиск кратчайшего пути. 3) (Y mod 5) + 1 =(509 mod 5) +1 =4 + 1 = 5; Алгоритм сортировки: сортировка-шейкер. 2 АЛГОРИТМ СОРТИРОВКИ: СОРТИРОВКА ШЕЙКЕР 2.1 Математическое описание задачи Сортировка – это перестановка элементов некоторого множества в заданном порядке при некоторой упорядочивающей функцию. Сортировка используется для ...

Скачать
437256
70
0

... распределения материальных благ и развития промышленного производства (сельского хозяйства, здравоохранения, связи и т. п.). Рис. 8.3. Структура системы управления общественным производством В реализации задачи инновационный менеджмент занимает специфическую и важную роль в установлении критериев и путей развития. 1 – Сбор данных и выделение ошибок. 2 – Анализ последствий ...

Скачать
182843
25
24

... телеги, микропроцессорные системы и т.д. В данном дипломном проекте поставлена задача оптимизировать сборку телеги, а также выявить экономический эффект за счет инноваций технологии и экономии ресурсов. Рассмотрим основные составляющие телеги: -                     Полка ТМ.201.01.03 – 24 шт. – Лист Б-О-ПН-2,0 ГОСТ 19903-74/12Х18Н10Т ГОСТ 5582-75; -                     Заглушка ТМ.201.01.09 – ...

Скачать
333055
3
8

... руководителя. Большое внимание следует уделять мотивации управленческого труда.    56. Организационно-распорядительные методы управления (Или административные). С их помощью осуществляются регулирующие функции гос-ва. Основаны на исполнении обязательных предписаний и рекомендаций, позволяют оперативно воздействовать на ход событий в процессе упр-я, ср-во волевого и конкретного воздействия ( ...

0 комментариев


Наверх