русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2013-12-23; просмотров: 1693; Нарушение авторских прав


Пузырьковая сортировка

Сортировка вставкой

Сортировка вставкой – еще один алгоритм сложности O(N2). Основан на внедрении в отсортированную часть массива элемента, следующего за этой частью, если он удовлетворяет условию сортировки. Алгоритм просматривает исходный список в порядке возрастания и ищет место, где необходимо вставить новый элемент. Затем он помещает новый элемент в найденную позицию.

На первом проходе второй элемент сравнивается с первым, на втором – третий элемент сравнивается с первым и вторым и т.д. Если проверяемый i+1-ый элемент удовлетворяет условию сортировки среди i элементов, то он вставляется на j-е место без нарушения порядка, т.е. элементы с индексами >=j и <=i-1 увеличивают свой индекс на 1.

For i = 2 To n 'сравнение всегда начинается b = a(i): j = 1 'с первого Do While b > a(j) 'определяется номер j = j + 1 'для вставки Loop For k = i To j + 1 Step –1 'освобождается a(k) = a(k - 1) 'место для вставки Next k a(j) = b 'осуществляется вставка For l = 1 To n Picture2.Print a(l); " "; Next Picture2.Print Next I End Sub Всего проходов n-1.

 

Подобный алгоритм много времени тратит на поиск правильной позиции для нового элемента. Работает медленнее, чем сортировка выбором.

 

 

Пузырьковая сортировка – это алгоритм, предназначенный для сортировки списков, которые уже находятся в почти упорядоченном состоянии. Если это условие выполнено, то алгоритм выполняется очень быстро, за время порядка O(N). Если элементы изначально расположены в произвольном порядке, алгоритм выполняется за O(N2) шагов.

При пузырьковой сортировке список просматривается до тех пор, пока не найдутся два смежных элемента, которые следуют не по порядку. Они меняются местами, и список продолжает исследоваться дальше. После первого прохода на первом месте (по возрастанию) окажется самый маленький элемент. Следующий проход будет осуществляться до этого элемента, т.е. сортируется оставшаяся часть массива. Алгоритм повторяет этот процесс, пока не упорядочит все элементы.



 

Суть сортировки:

  1. N элементов массива разбивается на K групп, причем в группе не более 2 элементов, элементы располагаются на расстоянии D друг от друга. D – шаг группы.
  2. Производится сортировка в группах.
  3. Шаг группы D уменьшается вдвое.
  4. Повторяются пункты 2 – 3 до тех пор, пока шаг не станет меньше 1.


2 4 5 3 10 8 1

 

В разных вариантах метода Шелла может быть задана разная последовательность уменьшения шагов и способов определения начального значения D.Начальное значение шага D можно задать, как степень числа 2, таким образом, что D ≥ N/2. При больших значениях N время сортировки методом Шелла значительно меньше, чем в методе пузырька.

 

d = 1

Do While n > d

d = 2 * d

Loop

d = Int((d - 1) / 2)

Do While d <> 0

Picture2.Print " d= "; d

For i = 1 To n - d

For j = i To 1 Step -d

l = j + d

If a(l) <= a(j) Then

buf = a(j)

a(j) = a(l)

a(l) = buf

End If

Next

Picture1.Print a(i);

Next

Picture1.Print

d = Int((d - 1) / 2)

Loop

For i = 1 To n

Picture1.Print a(i);

Next

 

Пирамидальная сортировка (бинарные деревья)

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

Любой массив можно представить в виде пирамиды, поместив первый элемент массива в корень пирамиды.

Например, 2 4 5 3 10 8 1

 
 

 


Поддерево, начинающееся в любом узле пирамиды, тоже является пирамидой.

Используя этот факт, можно построить пирамиду снизу вверх. Из каждого из поддеревьев с тремя узлами нужно сформировать пирамиду. Для этого нужно сравнить верхний узел с двумя его дочерними. Если любой из дочерних узлов больше, нужно поменять его с верхним узлом. Если оба дочерних узла больше, нужно поменять родительский с большим из дочерних. Этот шаг повторяется до тех пор, пока все поддеревья не станут пирамидами:

 
 

 

 


Затем, создаются более крупные пирамиды: маленькие пирамиды с вершинами 10 и 8 объединяются с элементом 2.

 

В итоге на самой вершине пирамиды оказывается максимальный элемент последовательности. Выкидываем его из пирамиды, а на его место ставим крайний справа элемент на нижнем уровне. Из оставшихся элементов снова строим пирамиду. На вершине получаем следующий наибольший элемент и т. д.




<== предыдущая лекция | следующая лекция ==>
Сортировка выбором | Итоги сессии


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.