| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Метод пузырька |
| Автор: Delphist 27.10.2008, 16:41 | ||
Есть у меня три варианта сортировки методом пузырька, скажите, пожалуйста, какой из них наиболее быстрый и наиболее правильней.
|
| Автор: morpheyushka 27.10.2008, 17:02 | ||
Не одной из перечисленных реализации не помню...на сколько помню - нужно так:
|
| Автор: morpheyushka 27.10.2008, 17:17 |
так протестируй сам...позасекай время на одном массиве и сравни |
| Автор: Delphist 27.10.2008, 17:21 | ||
Твой вариант неправилен, для случая когда массив состоит из 2-х элементов |
| Автор: morpheyushka 27.10.2008, 17:31 | ||
Я знаю Если в этом есть необходимость - то я ставил всегда проверку Добавлено через 58 секунд Зато он классно работает - он не проходит по несколько раз по отсортированной части массива |
| Автор: Poseidon 28.10.2008, 09:34 |
| Не нашел принципиальной разницы между первым и вторым вариантами. Они будут равны по скорости. Третий вариант будет быстрее, если массив не вильно рассортирован. Например массив (5,1,2,3,4) в третьем варианте будет отсртирван за один цикл, а то время как в первых вариантах надо 4 цикла (при этом в каждом из этих циклов по 4 подцикла). При этом первые два варианта будут полностью гонять циклы аже если им передать уже сортированный массив. Третий вариант проверит за один раз. ИМХО, выбирать надо третий. |
| Автор: Mayk 28.10.2008, 09:43 |
имхо выбирать надо quick sort. От бубл сорта вообще прока нет. |
| Автор: Poseidon 28.10.2008, 09:49 |
| Где ты это нашел в первм посте. Там 3 варианта и спрашивается какой лучше из этих трех! Если бы был вопрос, какой метод сортировки лучше в принципе, тогда твой ответбыл бы уместен. |
| Автор: THandle 28.10.2008, 09:52 | ||
| Копия моего поста с исходников: Ну что ж... Решил потестировать сортировочки Все тесты проводились на количестве итераций цикла = 100000 + 1. "Время" засекалось с помощью GetTickCount. Вот результаты: Размерность массива = 10: 1 вариант: 62 2 вариант: 63 3 вариант: 47 Быстрая сортировка: 78 Размерность массива = 25: 1 вариант: 281 2 вариант: 297 3 вариант: 297 Быстрая сортировка: 219 Размерность массива = 50: 1 вариант: 1047 2 вариант: 1062 3 вариант: 1047 Быстрая сортировка: 485 Размерность массива = 100: 1 вариант: 4109 2 вариант: 4109 3 вариант: 4110 Быстрая сортировка: 1094 Размерность массива = 200: 1 вариант: 16922 2 вариант: 16781 3 вариант: 16672 Быстрая сортировка: 2250 Размерность массива = 500: 1 вариант: 107687 2 вариант: 106531 3 вариант: 105969 Быстрая сортировка: 6141 Из всех этих тестов напрашивается вывод - все три сортировки примерно равны, разница во времени выполнения начинает замечаться только на больших массивах(в данном случае размером в 500 элементов). То есть самая быстрая получается 3, потом 2, потом 1. Только не понятно зачем нужна эта сортировка пузырьками, когда быстрая сортировка уже на массиве в 100 элементов работает в 4 раза быстрее. А вообще, в связи с недавним http://forum.vingrad.ru/forum/topic-231619.html, из всех тестируемых мною сортировок было выявлено следующее: на маленьких массивах(до 50 элементов, примерно) лучше всего себя показывает сортировка поиском http://forum.vingrad.ru/faq/topic-201072.html, а на больших - быстрая сортировка. Тест проводился с помощью такой вот незамысловатой программки:
На процессоре Intel Core 2 Duo E6300 1,86x2. Удачи =) |
| Автор: Poseidon 28.10.2008, 10:42 |
| THandle, твой тест немного не корректный, т.к. разные варианты сортировок испытываются на разных массивах. Правильнее было бы испытавать разные варианты на одном и том же массиве. |
| Автор: THandle 28.10.2008, 11:09 |
| Poseidon, согласен. Тест немного некорректен, но все таки общие позиции показывает. |
| Автор: maFFin 15.9.2010, 13:10 |
| подскажите, какой из этих кодов самый тупой и самый простой? мне нужно с двумя For-ами где один до N а другой до N-1 спасибо |
| Автор: THandle 15.9.2010, 14:09 |
| maFFin, думаю вот это: http://forum.vingrad.ru/faq/topic-200441.html ... |