Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сортировка.doc
Скачиваний:
0
Добавлен:
31.07.2019
Размер:
91.14 Кб
Скачать

6

4. Сортировка

Цель практического занятия по данной теме - ознакомиться с простейшими методами сортировки и приобрести навыки их использования и оценивания их сложности.

Под сортировкой понимают процесс перестановки объектов данного множества в определенном порядке. Цель сортировки - облегчить последующий поиск элементов в отсортированном множестве.

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

Этот метод обычно заключается в следующем. Элементы условно разделяются на готовую последовательность аi, …аi-1, и входную последовательность а1, …аn. На каждом шаге, начиная с i = 2 и увеличивая i на единицу, берут i-й элемент входной последовательности и передают в готовую последовательность, вставляя его на подходящее место. При поиске подходящего места удобно чередовать сравнения и пересылки, т.е. как бы "просеивать" сравнивая его с очередным элементом а и либо вставляя х, либо пересылая аi направо и продвигаясь налево. Заметим, что "просеивание" может закончиться при двух различных условиях:

1. Найден элемент аi с ключом, меньшим, чем ключ х.

2. Достигнут левый конец готовой последовательности.

Этот типичный пример цикла с двумя условиями окончания дает возможность рассмотреть хорошо известный прием фиктивного элемента ("барьера"). Его можно легко применить в этом случае, обновив барьер а0 = х. (Заметим, что для этого нужно расширить диапазон индексов в описании а до 0,...,n.)

Процесс сортировки простыми включениями показан в табл. 4.1 на примере восьми случайно взятых чисел.

Словесное описание алгоритма.

0. В готовую подпоследовательность записывается а1, во входную – а2,....аn.

1. i = 2.

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

а) расширяем готовую подпоследовательность слева : а0 = х - барьер;

б) просматривая элементы готовой подпоследоватепьности слева направо, находим такой номер j что и ai <=x < ai+1 ;

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

г) ai+1 = x

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

Таблица 4.1

Начальные ключи

44

5 5

12

42

94

18

06

67

i = 2

4 4

55

12

42

94

18

06

67

i = 3

12

4 4

55

42

94

18

06

67

i = 4

12

42

44

55

9 4

18

06

67

i = 5

12

4 2

44

55

94

18

06

67

i = 6

1 2

18

42

44

55

94

06

67

i = 7

06

12

18

42

44

94

9 4

67

i = 8

06

12

18

42

44

55

67

94

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

Словесное описание алгоритма

0. В готовую подпоследовательность записывается а1, во входную а2,....аn.

1. i = 2

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

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

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

в) ai+1 = х

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