![]() |
|
![]() ![]() ![]() |
|
BIV |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 20.12.2007 Репутация: нет Всего: 1 |
Всем доброе время суток!
Меня заинтересовали методы сортировка элементов, пусть даже массивов. Я знаю только один метод "метод пузырька", где мы в цикле сравниваем какой из элементов больше или меньше и в соответствии условием переставляем их местами. Мне кажется, что такая сортировка очень долгая, будут замечаться тормоза, если будет большое количества элементов. Какие бывают еще методы и как они работают? Какие методы считаются быстрыми? |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 1 Всего: 211 |
http://ru.wikipedia.org/wiki/%D0%90%D0%BB%...%B2%D0%BA%D0%B8 Такого понятия как "самый быстрый алгоритм сортировки" не существует, их сравнивают по разным критериям. Например сложность алгоритма в худшем случае (worst-case). Некоторые алгоритмы хорошо подходят для параллельного выполнения.. в общем все зависит. |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Метод пузырька далеко не самый медленный и не самый простой. Проще и, как правило, медленнее метод попарной перестановки.
Вообще же скорость сортировки больше всего зависит от исходной расстановки элементов. В каком-то варианте та же попарная перестановка сработает быстрее всех. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Akina |
|
||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Метод пузырька (камня) в одной из двух возможных реализаций и есть метод попарной перестановки.
http://algolist.manual.ru/sort/index.php -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Отнюдь. Метод попарной перестановки, в его классическом варианте, заключается в тупом проходе по всему массиву данных с последовательной проверкой каждой пары соседей. При необходимости пара соседей меняется местами. Цикл прерывается после прохода, в котором ни одна пара местами поменена не была. При всей своей тупости, алгоритм обладает неоспоримым преимуществом: у программы самый простой код: один цикл, один флаг, одна дополнительная переменная. Его легко объяснять студентам нетехнических специальностей ![]() В методе пузырька каждый элемент по очереди "всплывает" в массиве до того, как найдет свое место. Осуществлено всплывание может быть как попарными перестановками (что не есть хорошо), так и сдвигом блока элементов в массиве: поэлементно или всем блоком (конечно, если синтаксис конкретного языка допускает такой сдвиг блока). Это сообщение отредактировал(а) _Y_ - 13.2.2011, 00:08 -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Вы забываете, что на каждом проходе длина прохождения уменьшается на 1. Или это уж слишком тупая реализация. Так что получается тот же камень-пузырёк. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Сначала хотел написать "ну Вы меня удивляете!". Потом подумал "а не дурак ли я?". Или неправильно алгоритм простейший расписал? Действительно, в описании пузырькового алгоритма написал "...всплывание может быть как попарными перестановками (что не есть хорошо)..." думал так будет понятнее. Надо понимать этим все и запутал. Вот блок-схема алгоритма попарной перестановки: ![]() Действительно, последний элемент в нем гарантированно занимает свое место с первого прохода, со второго прохода - два последних элемента, и т.д. Т.е. вполне логично укорачивать цикл по ходу дела. Но тупость алгоритма не в этом, а в том, что элементы переставляются именно попарно. В алгоритме камня/пузырька, тонущий/всплывающий элемент должен запоминаться в буферной переменной один раз, после чего сдвигается весь блок внутри массива и, только после этого, элемент "возвращается" в массив - уже на нужное (но не обязательно окончательное) место. В результате сдвиг элемента на M позиций требует в одном варианте 3*M присвоений (попарная перестановка), а в другом только M+2 (камень/пузырек). А если язык позволяет двигать блоки в массиве, то и того лучше - два присвоения и сдвиг блока. Однако, здесь есть один нюанс. Начальная расстановка элементов в сортируемом массиве определяет сколь велик выигрыш от применения пузырька. Чем короче сдвигаемые за один раз блоки, тем меньше выигрыш. Это сообщение отредактировал(а) _Y_ - 13.2.2011, 19:04 -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Обалдеть, я уже думал, что об этом никто не помнит... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
А дырки в перфокартах глазами читать слабо? ![]() -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
C перфокартами не работал. А вот перфоленты - ещё как...
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |