У звичайному курсі алгоритмів нас вчать, що в середньому швидкості є а в гіршому - . Одночасно вивчаються інші алгоритми сортування, які є у гіршому випадку (наприклад, злиття та велика частина ), і навіть лінійний час у кращому випадку (як бульбашка ), але з деякими додатковими потребами пам'яті.O ( n 2 ) O ( n журнал n )
Після швидкого огляду на ще певні часи , природно сказати, що хитрощі не повинні бути настільки ефективними, як інші.
Крім того, врахуйте, що студенти в основних курсах програмування навчаються, що рекурсія взагалі не дуже хороша, оскільки вона може використовувати занадто багато пам’яті тощо. Тому (і хоча це не справжній аргумент), це дає ідею про те, що не може бути швидкодія дійсно добре, тому що це рекурсивний алгоритм.
Чому ж тоді химерна перевага перевершує інші алгоритми сортування на практиці? Чи це стосується структури даних реального світу ? Це має відношення до способу роботи пам'яті в комп’ютерах? Я знаю, що деякі спогади проходять швидше, ніж інші, але я не знаю, чи це справжня причина цього контрінтуїтивного виконання (порівняно з теоретичними оцінками).
Оновлення 1: канонічна відповідь говорить про те, що константи, що беруть участь у середнього випадку, менші, ніж константи, що беруть участь в інших алгоритмах . Однак я ще не бачив належного обґрунтування цього, точні розрахунки замість інтуїтивно зрозумілих ідей.O ( n журналу n )
У будь-якому випадку, схоже, що реальна різниця виникає, як це підказує деякі відповіді, на рівні пам'яті, де реалізація використовує переваги внутрішньої структури комп'ютерів, використовуючи, наприклад, що кеш-пам'ять швидше, ніж оперативна пам'ять. Обговорення вже цікаво, але я все ж хотів би отримати більш детальну інформацію щодо управління пам'яттю, так як здається , що відповідь повинна робити з нею.
Оновлення 2: Існує декілька веб-сторінок, які пропонують порівняння алгоритмів сортування, деякі більш привабливі, ніж інші (особливо це сортування-algorithms.com ). Цей підхід, крім представлення приємної наочної допомоги, не відповідає на моє запитання.