Сортировка шелла пример программы

Сортировка Шелла это, по-сути, модификация схем сортировки других алгоритмов. Фактически для сортировки элементов используются другие алгоритмы, такие как: пузырьком, вставками, выбором и т.д. Но только эти алгоритмы применяются не ко всей исходной последовательности, а к ее частям.

Сначала в исходной последовательности сортируются между собой элементы, отстоящие друг от друга на расстоянии n/2 элементов, затем на расстоянии n/4 и т.д. до тех пор пока не получим 2 последовательности, элементы которых отстоят друг от друга на расстоянии 1-го элемента. После этого делаем сортировку этой полученной последовательсти выбранным методом и на выходе имеем уже полностью отсортированную последовательность.

Возникает вопрос: зачем же были предыдущие сортировки? Для того, чтобы расположить сортируемые элементы наиболее близко к своим положенным позициям. А в этом случае в последней сортировке по всей последовательности значительно сокращается количество перестановок.

Пример. Имеется последовательность [2, 3, 9, 2, 8, 4, 6, 8, 11, 12, 4, 6], n=12. Символом d — будем обозначать расстояние между сортируемыми элементами на каждом шаге (на первом шаге d = n/2, на втором d = d/2 и т.д.)

Сортировка Шелла! Рекомендую тебе понять ее! Алгоритм прост и эффективен!

1 шаг. d = n/2 = 6. => Получаем 6 сортируемых групп(имеют одинаковый цвет):
[2, 3 , 9 , 2 , 8 , 4 , 6, 8 , 11 , 12 , 4 , 6 ]
После сортировки в пределах каждой группы, имеем:
[2, 3 , 9 , 2 , 4 , 4 , 6, 8 , 11 , 12 , 8 , 6 ]

2 шаг. d = d/2 = 3. => Получаем 2 сортируемых группы(имеют одинаковый цвет):
[2, 3 , 9 , 2, 4 , 4 , 6, 8 , 11 , 12, 8 , 6 ]
После сортировки в пределах каждой группы, имеем:
[2, 3 , 4 , 2, 4 , 6 , 6, 8 , 9 , 12, 8 , 11 ]

3 шаг. d = d/2 = 1(целочисленное деление) => заключительный шаг. Сортируем всю последовательность:
[2, 3, 4, 2, 4, 6, 6, 8, 9, 12, 8, 11] в итоге получим:
[2, 2, 3, 4, 4, 6, 6, 8, 8, 9, 11, 12]

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

Читайте также:
Что делать если вылетают программы на компьютере

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

Остальные проходы — делать не нужно: это будет делаться на каждой следующей итерации основного нашего алгоритма шелла, поскольку шаг d разбиения на группы уменьшается. НО! На заключительной сортировке всей последовательности метод пузырьком должен отработать полностью. Либо же следует вызвать сортировку вставками, либо выбором.

псевдокод: простая сортировка шелла пузырьком ссылка

При этом производительность алгоритма пропорциональна ~ O(n 2 ), но количество перестановок по-сравнению с простыми методами вставкой, выбором или пузырьком — заметно сокращается. Дополнительная память — не используется(не считая счетчиков циклов и проч.).

Величина шага d — называется приращением и является важной характеристикой алгоритма Шелла. И выбор динамики уменьшения этой величины очень существенно сказывается на производительности алгоритма в целом, позволяя достигать пропорций от ~ O(n 7/6 ) в лучшем случае до ~ O(n 4/3 ) в худшем, о чем рассказывает следующая задача сортировка Шелла, оптимальный выбор приращений.

Источник: codelab.ru

Сортировка шелла пример программы

Содержание:

  • Я — профессиональный и опытный репетитор по информатике, программированию и математике
  • Сортировка Шелла – это, по сути, оптимальная модификация алгоритма сортировки вставками
  • Мультимедийная презентация алгоритма сортировки Шелла
  • Пример кода программы на языке Паскаль, реализующего алгоритм сортировки Шелла
  • Если остались какие-то вопросы, неуверенность, недопонимание, то.

Я — профессиональный и опытный репетитор по информатике, программированию и математике

Вы ищите репетитора по информационным технологиям? Меня зовут Александр Георгиевич, и я тот, кто вам нужен! Уже на протяжении 10 лет я занимаюсь подготовкой школьников к успешной сдаче ОГЭ и ЕГЭ по информатике. Студентам оказываю поддержку в реализации всевозможных работ по программированию и помогаю им сдать различные экзамены по программированию.

Прекрасно понимаю, что вы чрезвычайно занятой человек, у которого куча дел, но настоятельно вам рекомендую все-таки уделить две-три минуты и познакомиться с отзывами моих клиентов, прошедших у меня курсы индивидуальной подготовки.

Читайте также:
Прекращена работа программы метро 2033 executable

В основном я занимаюсь информатикой и программированием, однако иногда происходит мультиподготовка, например, когда я готовлю 11-ника к успешной сдаче ЕГЭ, как по информатике, так и по математике. Не стоит забывать о том, что основу информатики кристаллизует математика, и данные дисциплины прекрасно дополняют друг друга.

Уверен в том, что на этой странице вы оказались не случайно! Вас интересует алгоритм сортировки Шелла. Только не нужно устраивать иеремиаду, когда после прочтения данной статьи вам не все будет понятно. Для фундаментального разбора алгоритма сортировки Шелла записывайтесь ко мне на первый пробный урок.

Сортировка Шелла – это, по сути, оптимальная модификация алгоритма сортировки вставками

Сразу хочу донести следующую мысль: вы не сможете разобраться с методом сортировки Шелла, если не будете глобально понимать алгоритм сортировки вставками. Сортировка Шелла, по факту является надстройкой над способом простых вставок, поэтому, сначала исследуйте сортировку простыми вставками, потратив на это определенное время.

Еще одним краеугольным камнем в алгоритме сортировки Шелла является выбор так называемого шага упорядочивания. Существует множество теоретических изысков по данной проблеме, и ученые вывели различные формульные зависимости, позволяющие максимально оптимально детерминировать шаг сортировки. Но в большинстве случаев все происходит достаточно тривиально: изначальный шаг составляет ровно половину длины заданного массива.

Также вы должны прекрасно уметь проводить такую информатическую операцию, как сдвиг элементов одномерного массива на одну позицию влево/вправо. Это несложное действие, при котором используется циклическая конструкция и некоторое количество клеток вашего головного мозга.

Мультимедийная презентация алгоритма сортировки Шелла

Выделив свободное время в своем плотном расписании уроков, я специально для вас снял видеоролик, в котором в наглядной, а главное — в доступной форме изложен алгоритм сортировки Шелла. Сразу предупреждаю, что в нем вы не найдете пример программного кода, там повествуется исключительно об алгоритмической составляющей этого способа сортировки.

Пример кода программы на языке Паскаль, реализующего алгоритм сортировки Шелла

Меня часто спрашивают мои ученики-неофиты: насколько сложно самостоятельно запрограммировать алгоритм сортировки Шелла, до какой степени трудно и долго изучать его на самом глубоком уровне, понять все его хитросплетения? Как правило, я отвечаю, что данный процесс достаточно длителен и интеллектуально затратен. Вам придется полностью вызубрить и понять фундаментальные основы программирования перед тем, как вы сможете реализовать данный алгоритм на практике, на каком-либо языке программирования.

Читайте также:
Как узнать вредные программы

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

Если остались какие-то вопросы, неуверенность, недопонимание, то.

Если, прочитав данный информационный материал, у вас появились какие-то дополнительные вопросы относительно алгоритма сортировки Шелла или вы хотите познакомиться с другими, не менее интересными способами упорядочивания данных, то берите в руки мобильный телефон и звоните мне на контактный номер. Задавайте любые ваши тематические вопросы, договаривайтесь о проведении первого индивидуального занятия.

Наверняка у вас проскользнула мысль о цене: сколько же стоят мои услуги? Своим потенциальным ученикам я предлагаю 144 варианта взаимовыгодного сотрудничества. Даже самый-самый требовательный клиент сможет выбрать такое взаимодействие, которое полностью удовлетворит его запросы.

Меня часто спрашивают, провожу ли я занятия на выезде. Мой ответ утвердительный – да! Своим клиентам я предлагаю четыре разных территориальных формата взаимодействия:

Не откладывайте свое решение в долгий ящик. Звоните прямо сейчас и записывайтесь на индивидуальные уроки по информатике, математике и программированию. Скажу вам честно, я – достаточно востребованный русскоязычный репетитор, следовательно, я не могу взять всех желающих под свое «крыло». Количество ученических мест ограниченно в любое время года, в особенности весной.

Источник: www.videoege.ru

Программирование на C, C# и Java

Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы

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

В этом уроке будет рассмотрена сортировка Шелла. Мы приведем алгоритм, а также его реализацию на языке программирования Си с подробными комментариями.

Описание алгоритма «Сортировка Шелла»

Этот метод сортировки Д. Шелл предложил в 1959 г. Он использует минимум памяти и показывает высокие скорости при сортировке. По сути в методе Шелла применяются сравнения и перестановки элементов аналогичные методу вставок, но при этом порядок сравниваемых элементов совершенно другой.

Идея сортировки методом Шелла состоит в том, чтобы сортировать элементы отстоящие друг от друга на некотором расстоянии step. Затем сортировка повторяется при меньших значениях step, и в конце процесс сортировки Шелла завершается при step = 1 (а именно обычной сортировкой вставками).

До сих пор продолжает обсуждаться вопрос выбора шага сортировки step. Шелл предложил такую последовательность: N/2, N/4, N/8 …, где N — количество элементов в сортируемом массиве.

Сортировка Шелла требует около log2N проходов для упорядочивания последовательности длиной N.

Реализация алгоритма сортировки Шелла

Ниже приводится программная реализация на языке программирования Си:

Источник: vscode.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru