- •( Для студентов, обучающихся по направлению подготовки 6.050101 ”Компьютерные науки”)
- •( Для студентов, обучающихся по направлению подготовки 6.050101 ”Компьютерные науки”)
- •Введение
- •Классификация структур данных
- •Структура оперативной памяти
- •Лабораторная работа 1 методы сортировки постоянных таблиц и поиска в таблицах
- •Методические указания к выполнению работы
- •Определение операции сортировки
- •Линейный выбор (сортировка выбором)
- •Линейный выбор с подсчетом
- •Метод "пузырька"
- •{Описание типов}
- •Шейкер – сортировка
- •Метод вставки с прямым включением
- •Метод вставки с бинарным включением
- •Метод двухпутевой вставки
- •Метод Шелла
- •"Быстрая" сортировка (обменная сортировка с разделением)
- •Метод простого двухпутевого слияния (сортировка слиянием)
- •Метод естественного слияния (сортировка слиянием)
- •Дихотомический поиск по совпадению
- •Дихотомический поиск нескольких записей
- •Дихотомический поиск по близости
- •Дихотомический поиск по интервалу
- •Задание к лабораторной работе
- •Варианты заданий
- •Требования к выполнению лабораторной работы
- •Контрольные вопросы
- •Литература
- •Приложение а Примеры программ, выполняющих сортировку таблицы методом линейного выбора
- •Программа на языке с
- •Приложение в краткое описание системы turbo pascal
- •1. Структура pascal-программы
- •2. Простые типы
- •3. Составные типы
- •4. Операторы
- •5. Процедуры и функции
- •6. Файлы
- •7. Управление консолью
- •Содержание
- •Методические указания и задания
- •К лабораторным работам по курсу
- •«Алгоритмы и структуры данных»
- •(Для студентов обучающихся по направлению подготовки 6.050101 ”Компьютерные науки”)
Метод Шелла
Эффективным усовершенствованием метода вставки является метод Шелла – прямое включение с убывающим шагом.
Метод состоит в том, что упорядочиваемая таблица разбивается на группы элементов (записей), каждая из которых упорядочивается методом вставки. В группу входят не непосредственные соседи, а записи, отстоящие друг от друга на заданное расстояние h (шаг группы). Таким образом, группой таблицы называют такую совокупность элементов, номера которых образуют арифметическую прогрессию с разностью h.
В начале процесса упорядочения выбирается первый шаг группы, который Шелл предложил брать в виде h1=[n/2], где n – размер таблицы. Однако Хиббард показал, что сортировка дает лучшие результаты, если первый шаг будет степенью двойки: h1=2k-1, где 2k <=n <2k+1. Последующие шаги определяются по формуле: hi = [hi-1/2].
Таким образом, при каждом новом просмотре таблицы расстояние между элементами группы уменьшается, количество же элементов в группе увеличивается. На последнем просмотре шаг становится равным 1.
На ранних просмотрах элементы совершают большие скачки к нужным позициям, а не передвигаются на одну позицию, как в методе вставки. Это позволяет сократить число повторных сравнений и обменов на более поздних просмотрах. На последнем просмотре таблицы записи будут расположены близко к своим позициям, и, следовательно, не потребуют значительных перемещений при окончательном размещении.
Рассмотрим подробнее алгоритм метода.
После выбора h1 методом вставки упорядочиваются группы, содержащие элементы с номерами позиций i, i+h1, i+2*h1, ..., i+mi*h1. При этом i=1,2,...,h1 (не более h1); mi – наибольшее целое, удовлетворяющее неравенству i+mi*h1 <= n.
Затем выбирается шаг h2 (h2<h1), и упорядочиваются группы, содержащие элементы с номерами позиций i, i+h2, ..., i+mi*h2. Эта процедура со все уменьшающимися шагами продолжается до тех пор, пока очередной шаг hl станет равным единице (h1>h2>...>hl). Этот последний этап представляет собой упорядочение всей таблицы методом вставки. Но так как исходная таблица упорядочивалась отдельными группами с последовательным объединением этих групп, то общее количество сравнений значительно меньше, чем n2/4, требуемое при методе вставки. Число операций сравнения пропорционально n (log2n)2 .
Рассмотрим пример сортировки методом Шелла:
Номера позиций упорядочиваемой таблицы |
Шаг |
||||||||||||||
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
|
6 |
1 |
3 |
15 |
8 |
14 |
13 |
11 |
10 |
4 |
9 |
2 |
5 |
12 |
7 |
h=7 |
6 |
1 |
3 |
15 |
8 |
14 |
13 |
7 |
10 |
4 |
9 |
2 |
5 |
12 |
11 |
|
6 |
1 |
3 |
15 |
8 |
14 |
13 |
7 |
10 |
4 |
9 |
2 |
5 |
12 |
11 |
|
6 |
1 |
3 |
15 |
8 |
14 |
13 |
7 |
10 |
4 |
9 |
2 |
5 |
12 |
11 |
|
6 |
1 |
3 |
9 |
8 |
14 |
13 |
7 |
10 |
4 |
15 |
2 |
5 |
12 |
11 |
|
6 |
1 |
3 |
9 |
2 |
14 |
13 |
7 |
10 |
4 |
15 |
8 |
5 |
12 |
11 |
|
6 |
1 |
3 |
9 |
2 |
5 |
13 |
7 |
10 |
4 |
15 |
8 |
14 |
12 |
11 |
|
6 |
1 |
3 |
9 |
2 |
5 |
12 |
7 |
10 |
4 |
15 |
8 |
14 |
13 |
11 |
h=3 |
4 |
1 |
3 |
6 |
2 |
5 |
9 |
7 |
10 |
12 |
15 |
8 |
14 |
13 |
11 |
|
4 |
1 |
3 |
6 |
2 |
5 |
9 |
7 |
10 |
12 |
13 |
8 |
14 |
15 |
11 |
|
4 |
1 |
3 |
6 |
2 |
5 |
9 |
7 |
8 |
12 |
13 |
10 |
14 |
15 |
11 |
h=1 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
|