По-перше, визначення, оскільки це досить важливо: стабільний сорт - це те, що гарантовано не переставляє елементи однаковими ключами.
Рекомендації:
Швидкий сортування: коли вам не потрібен стабільний сортування, а середня ефективність випадку має значення, ніж найгірша ефективність. Швидкий сорт - в середньому O (N log N), у гіршому - O (N ^ 2). Хороша реалізація використовує O (log N) допоміжне сховище у вигляді простору стеку для рекурсії.
Сортування сортування: Коли вам потрібен стабільний, O (N log N) сортування, це лише ваш єдиний варіант. Єдиним недоліком цього є те, що він використовує допоміжний простір O (N) і має трохи більшу константу, ніж швидкий сортування. Існують деякі різновиди злиття на місці, але AFAIK всі вони або не стабільні, або гірші, ніж O (N log N). Навіть сорти O (N log N) мають настільки велику константу, ніж звичайний старий сорт злиття, що вони більше теоретичні цікавості, ніж корисні алгоритми.
Сортування купи: Коли вам не потрібен стабільний сорт, і вам більше важливо гірший показник, ніж середній показник. Це гарантовано O (N log N), і він використовує допоміжний простір O (1), це означає, що вам несподівано не вистачить місця з кучі чи стеку на дуже великих входах.
Introsort: Це швидкий сорт, який переходить до сортування купи після певної глибини рекурсії, щоб обійти найгірший випадок швидкого сортування (N ^ 2). Це майже завжди краще, ніж звичайний старий швидкий сорт, оскільки ви отримуєте середній випадок швидкого сортування, із гарантованою продуктивністю O (N log N). Напевно, єдина причина використовувати сортування купи замість цього - в сильно обмеженій пам'яті системах, де O (log N) простір стеків практично значний.
Сортування вставки : Коли N гарантовано буде невеликим, в тому числі в якості базового випадку швидкого сортування або сортування. Хоча це O (N ^ 2), він має дуже малу константу і є стабільним сортом.
Сортування бульбашок, сортування вибору : коли ви робите щось швидке і брудне, і ви чомусь не можете просто використовувати стандартний алгоритм сортування бібліотеки. Єдиною перевагою, яку вони мають перед сортуванням вставок, є те, що вона трохи легша у виконанні.
Сортування порівняння: За деяких досить обмежених умов можна зламати бар'єр O (N log N) і сортувати в O (N). Ось кілька випадків, коли варто спробувати:
Сортування підрахунку: Коли ви сортуєте цілі числа з обмеженим діапазоном.
Сортування радікса: Коли log (N) значно більший за K, де K - кількість цифр радіасу.
Сортування відра: Коли ви можете гарантувати, що ваш внесок приблизно рівномірно розподілений.