Я провел несколько тестов и обнаружил, что quicksort на самом деле работает медленнее, чем больше отсортированный список, а довольно противоречивый! Я прочитал алгоритм быстрой сортировки по википедии, но я не совсем понимаю, почему это занимает больше времени, чем больше отсортировано. Любая помощь будет оценена!Quicksort занимает больше времени в отсортированных списках
ответ
Нерандомизированная быстрая сортировка обычно выбирает первый элемент как элемент поворота; когда список уже отсортирован, это приведет к тому, что список будет разделен на пустой левый список и правый список, содержащий n-1 элементов. Же поведение будет происходить в каждом рекурсивном вызове, а общее время выполнения будет п + п-1 + п-2 + ... = O (N^2).
, если вы хотите гарантировать O (nlogn), используйте медианную медианную информацию для поворота выбор – Daniel
@ Daniel - если вы хотите гарантировать O (n log n), гораздо разумнее использовать слияние или хаппорт. Медиана медианов может дать вам вашу асимптотическую гарантию (я не проверял дважды), но она сложная, и постоянные факторы будут довольно бедными. – Steve314
@ Steve314, я знал, что есть накладные расходы, но, поскольку я никогда не использовал его в действительности, я не знал, сколько. Спасибо за подсказку :) – Daniel
Что вы имеете в виду, это хорошо известная проблема с QuickSort. Одним из способов решения проблемы является использование элемента, отличного от первого, в качестве элемента поворота.
Эта запись StackExchange имеет очень хорошие записи на QuickSort в целом: https://cs.stackexchange.com/questions/3/why-is-quicksort-better-than-other-sorting-algorithms-in-practice
Эта статья идет гораздо более глубокий и занимает в этом вопросе для уже отсортированного списка и способов реализации QuickSort, что работа такого рода аномалии. http://www.csie.ntu.edu.tw/~b93076/p847-sedgewick.pdf
- 1. Многопоточный QuickSort занимает больше времени, чем обычно. QuickSort
- 2. pouchdb.query занимает больше времени
- 3. ExpectedConditions.InvisibilityOfElementLocated занимает больше времени
- 4. Apache Server занимает больше времени
- 5. Многопроцессорность Python занимает больше времени
- 6. страница рендеринга занимает больше времени
- 7. Риффицированный рендеринг занимает больше времени
- 8. Задействовать запрос занимает больше времени
- 9. Vimrc файл занимает больше времени и больше времени, чтобы перезагрузить
- 10. загрузка файлов занимает больше времени в PHP
- 11. Использование addQueueNames в SimpleMessageListenerContainer занимает больше времени
- 12. Загрузка фрагмента занимает больше времени в Android
- 13. Сохранение продукта занимает больше времени в magento?
- 14. pg_restore занимает больше времени в передней части
- 15. AssertEquals в отсортированных списках всегда возвращает false
- 16. Почему quicksort занимает больше времени при сортировке по убыванию по возрастанию
- 17. Выход Powershell занимает больше времени для отображения
- 18. Cassandra рассчитывать запрос занимает больше времени
- 19. Загрузка FTP-мута занимает больше времени
- 20. Запрос MySQL занимает больше времени с индексами?
- 21. Camera.takePicture занимает больше времени с XE11
- 22. Thread.sleep() занимает больше времени, чем ожидалось?
- 23. WCF EndpointNotFoundException занимает больше времени, чем TimeoutException
- 24. EntityContext.SaveChange() занимает больше времени при первом вызове
- 25. CompletedFuture занимает больше времени - Java 8
- 26. Этот алгоритм занимает больше времени, чем ожидалось
- 27. полнотекстовый индекс занимает больше времени, чтобы выполнить
- 28. Если программа pthread занимает больше времени
- 29. вызов Opencpu занимает больше времени, чем ожидалось
- 30. csvstat занимает намного больше времени, чем pandas
Сообщите свой код, если вы хотите получить помощь. Я также думаю, что этот вопрос больше подходит для [Программистов] (http://programmers.stackexchange.com/). – Renan
в основном в отсортированном списке, quicksort будет стремиться в начале перетасовать список. – njzk2
Эта конкретная часть статьи в Википедии объясняет расчёт для сценария наихудшего случая http://en.wikipedia.org/wiki/Quicksort#Average-case_analysis_using_recurrences – njzk2