Я, вероятно, должен начать с упоминания о том, что и quicksort, и mergesort могут работать нормально, если вы не можете сразу вместить все в память. Вы можете реализовать quicksort, выбирая точку поворота, затем перемещая элементы с диска в память и записывая элементы в один из двух разных файлов, основываясь на том, как этот элемент сравнивается с точкой опоры. Если вы используете двунаправленную очередь приоритетов, вы можете сделать это еще эффективнее, установив максимальное количество возможных элементов в память сразу.
Другие упоминали о том, что mergesort является наихудшим O (n log n), что определенно верно. Тем не менее, вы можете легко модифицировать quicksort, чтобы создать алгоритм introsort, гибрид между quicksort, insertion sort и heapsort, что в худшем случае O (n log n), но в большинстве случаев сохраняет скорость quicksort.
Возможно, было бы полезно узнать, почему quicksort обычно быстрее, чем mergesort, поскольку, если вы понимаете причины, вы можете довольно быстро найти некоторые случаи, когда mergesort является явным победителем. Quicksort, как правило, лучше, чем сортировка слияния по двум причинам:
Quicksort имеет лучшую локальность ссылок, чем слияние, что означает, что доступы, выполненные в быстрой сортировке, как правило, быстрее, чем соответствующие доступы в слиянии.
Quicksort использует наихудшую память O (log n) (если она выполнена правильно), в то время как mergesort требует O (n) памяти из-за накладных расходов на слияние.
Существует один сценарий, хотя эти преимущества исчезают. Предположим, вы хотите отсортировать связанный список элементов. Элементы связанного списка разбросаны по всей памяти, поэтому преимущество (1) исчезает (нет места ссылки). Во-вторых, связанные списки могут быть объединены только с служебными данными O (1) вместо O (n), поэтому преимущество (2) исчезает. Следовательно, вы обычно обнаружите, что mergesort является превосходным алгоритмом сортировки связанных списков, поскольку он делает меньше общих сравнений и не подвержен плохому выбору.
Надеюсь, это поможет!
Дубликат имо: [почему-это быстрая сортировка, лучше, чем сортировка слиянием] (http://stackoverflow.com/questions/70402/why-is-quicksort-better-than-mergesort) – Manu