Быстрая сортировка и не беспокоить?


9

Особенно при написании «стандартных» (не HPC) приложений вы рассматриваете, какой алгоритм сортировки выбрать, или просто выбираете быструю сортировку (это то, что большинство библиотек просто называют сортировкой)? В определенной степени это может быть выгодно в определенных ситуациях, но, с другой стороны, для правильной оптимизации требуется некоторое время, чтобы проанализировать проблему и установить контрольные показатели.

Ответы:


12

В общем, использование методов по умолчанию, если нет особой необходимости делать что-то более экзотическое, делает ИМХО все более читабельным / понятным в будущем.

Если вы испытываете (или в некоторых случаях сильно подозреваете), что у вас есть проблема с производительностью, то самое время добавить сложности.

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


6

Всегда вызывайте указанные подпрограммы библиотеки, если только у вас нет очень веской причины не делать этого (и вам необходимо документально подтвердить, почему это так).

Это потому, что алгоритмы сортировки трудно получить абсолютно правильно. Была ошибка в быстрой сортировке Java с очень большими наборами данных, которая была идентифицирована, исправлена ​​и доставлена ​​клиентам Sun, поэтому вам не пришлось этого делать.

Также сортировка по умолчанию в Java 7 была обновлена ​​до более новой, лучшей сортировки. Также бесплатно.

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


3

На конференции однажды я услышал хорошую историю об этом.

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

Каждый погрузился в свои старые учебники по информатике, искал высокоэффективные процедуры, портировал их на Visual Basic и отправлял им по почте. Один из ребят только что отправил по почте «сколько значений в выпадающем списке?».

«Около 50» пришел ответ.

Msgstr "Просто установите для отсортированного свойства значение ИСТИНА".

В 99,9999% случаев сортировку лучше всего выполнять с использованием библиотеки, элемента управления или выбора SQL, поскольку разница в производительности между библиотечной подпрограммой и всем, что вы пишете, будет незначительной, а затраты на обслуживание и обслуживание значительно перевесят последствия.


1

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


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

1
@Hippo: На самом деле я не защищал использование пузырьковой сортировки. Я имел в виду, что современные компьютеры достаточно быстрые, и в большинстве случаев не имеет значения, насколько медленен ваш алгоритм, потому что пользователь не заметит.
Мейсон Уилер

Как насчет Богосорта ?
дсимча

0

Хотя это явно не имеет значения для битов и временных интервалов. Я считаю, что сортировку слиянием легче написать и понять, чем быстро сортировать. Так что, если я собираюсь написать свой собственный алгоритм сортировки, я бы использовал это.


Viva Mergesort! И немного лучший постоянный срок, и никакого ужасного наихудшего случая.
Фрэнк Ширар

0

По крайней мере, в грамотно написанной библиотеке я бы ожидал, что встроенная функция sortбудет реализована как интросорт, а не как быстрая сортировка. Разница редко имеет большое значение, но Introsort исключает плохую производительность Quicksort с минимальным влиянием на более распространенные случаи.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.