Алгоритм на псевдокоде


Сортировка методом Шелла

DO (k=hm, hm-1, … 1)

DO (i=k+1, k+2, … n)

t: = ai, j: =i-k

DO (j>0 и t < aj)

aj+k: = aj

j: = j-k

OD

aj+k: = t

OD

OD

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

h1=1, hi=2hi-1+1, i=2,… m, m=

При такой последовательности шагов средний порядок трудоёмкости O(n1.2), n → ∞. Таким образом, метод Шелла существенно быстрее методов с квадратичной трудоемкостью. Метод Шелла не устойчив.

3.3 Варианты заданий

1. Разработать процедуру сортировки массива целых чисел методом прямого включения (язык программирования Паскаль или Си). Правильность сортировки проверить путем подсчета контрольной суммы и числа серий в массиве. Предусмотреть подсчет количества пересылок и сравнений (М и С), сравнить их с теоретическими оценками.

2. Разработать процедуру сортировки массива целых чисел методом Шелла (язык программирования Паскаль или Си). Правильность сортировки проверить путем подсчета контрольной суммы и числа серий в массиве. Предусмотреть подсчет количества пересылок и сравнений (М и С), сравнить их с теоретическими оценками.

3.Сравнить метод прямого включения и метод Шелла по количеству сравнений и пересылок для различных типов массивов. Разработать процедуру построения графика зависимости величин М и С от размера массива.

4. Сравнить метод прямого включения и метод Шелла с ранее расмотренными методами сортировки по количеству сравнений и пересылок для различных типов массивов. Разработать процедуру построения графика зависимости величин М и С от размера массива

5. Экспериментально определить подходящую последовательность шагов для метода Шелла.

6. Опытным путем определить константы в выражениях оценки для количества сравнений и пересылок в методе Шелла.

4. Быстрые методы сортировки массивов

4.1 Пирамидальная сортировка

Пирамидальная сортировка основана на алгоритме построения пирамиды. Последовательность ai, ai+1,…,ak называется (i,k)-пирамидой, если неравенство

aj≤min(a2j, а2j+1) (*)

выполняется для каждого j, j=i,…,k для которого хотя бы один из элементов a2j, a2j+1 существует.

Например, массив А является пирамидой, а массив В ¾ не является.

А=(а2 , а3 , а4 , а5 , а6 а7 , а8 )=(3, 2, 6, 4, 5, 7)

В=(b1, b2, b3, b4, b5, b6, b7)=(3, 2, 6, 4, 5, 7)

 

Свойства пирамиды

1. Если последовательность ai, ai+1,…,аk-1, ak является (i, k)-пирамидой, то последовательность ai+1,…,ak-1, полученная усечением элементов с обоих концов последовательности, является (i+1, k-1)пирамидой.

2. Если последовательность a1…an – (1, n)-пирамида, то а1 – минимальный элемент последовательности.

3. Если a1, a2…,an/2,an/2+1,…an-произвольная последовательность, то последовательность an/2+1,…,an является (n/2+1, n)-пирамидой.

Процесс построения пирамиды выглядит следующим образом. Дана последовательность as+1,…,ak, которая является (s+1, k)-пирамидой. Добавим новый элемент х и поставим его на s-тую позицию в последовательности, т.е. пирамида всегда будет расширяться влево. Если выполняется (*), то полученная последовательность – (s, k)-пирамида. Иначе найдутся элементы a2s+1,a2s такие, что либо a2s < as либо a2s+1 < as.

Пусть имеет место первый случай, второй случай рассматривается аналогично. Поменяем местами элементы as и a2s. В результате получим новую последовательность as,as+1,…, a2s,…, ak. Повторяем все действия для элемента a2s и т.д. пока не получим (s, k)-пирамиду.

Пример.Добавим в (2, 8)-пирамиду новый элемент х=6.

Условные обозначения: Х новый элемент

Х сравнение с включаемым элементом

обмен элементов

 
  пирамида
6 3 2  
                 
4 5  
                 
пирамида

Рисунок 7 Добавление в пирамиду нового элемента



Дата добавления: 2022-02-05; просмотров: 341;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.011 сек.