Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
sd_lab_1.doc
Скачиваний:
23
Добавлен:
17.11.2018
Размер:
3.44 Mб
Скачать

Метод Шелла

Эффективным усовершенствованием метода вставки является метод Шелла – прямое включение с убывающим шагом.

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

В начале процесса упорядочения выбирается первый шаг группы, который Шелл предложил брать в виде h1=[n/2], где n – размер таблицы. Однако Хиббард показал, что сортировка дает лучшие результаты, если первый шаг будет степенью двойки: h1=2k-1, где 2<=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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]