Najpierw definicja, ponieważ jest bardzo ważna: stabilne sortowanie to takie, które gwarantuje, że nie zmieni kolejności elementów z identycznymi kluczami.
Zalecenia:
Szybkie sortowanie: gdy nie potrzebujesz stabilnego sortowania, a średnia wydajność sprawy ma większe znaczenie niż wydajność najgorszego przypadku. Szybkie sortowanie to średnio O (N log N), w najgorszym przypadku O (N ^ 2). Dobra implementacja wykorzystuje pamięć dyskową O (log N) w postaci miejsca na stosie do rekursji.
Sortowanie przez scalanie: jeśli potrzebujesz stabilnego sortowania O (N log N), jest to jedyna opcja. Jedyne wady to to, że wykorzystuje przestrzeń pomocniczą O (N) i ma nieco większą stałą niż sortowanie szybkie. Istnieje kilka typów scalania na miejscu, ale AFAIK wszystkie są albo niestabilne, albo gorsze niż O (N log N). Nawet sortowania O (N log N) w miejscu mają o wiele większą stałą niż zwykły stary sortowanie przez scalanie, że są bardziej teoretyczną ciekawostką niż użytecznymi algorytmami.
Sortowanie na stosie: gdy nie potrzebujesz stabilnego sortowania i bardziej zależy Ci na wydajności w najgorszym przypadku niż na średniej wydajności przypadku. Gwarantujemy, że będzie to O (N log N) i wykorzystuje przestrzeń pomocniczą O (1), co oznacza, że nieoczekiwanie nie zabraknie miejsca na stosie lub stercie na bardzo dużych wejściach.
Wstęp: To jest sortowanie szybkie, które przełącza się na sortowanie na stosie po określonej głębokości rekurencji, aby obejść najgorszy przypadek O (N ^ 2) sortowania szybkiego. Prawie zawsze jest lepsze niż zwykły stary szybki sort, ponieważ otrzymujesz średni przypadek szybkiego sortowania z gwarantowaną wydajnością O (N log N). Prawdopodobnie jedynym powodem używania sortowania stosu zamiast tego są systemy o bardzo ograniczonej pamięci, w których przestrzeń stosu O (log N) jest praktycznie znacząca.
Sortowanie przez wstawianie : gdy gwarantuje się, że N jest małe, w tym jako przypadek podstawowy szybkiego sortowania lub sortowania przez scalanie. Chociaż to jest O (N ^ 2), ma bardzo małą stałą i jest stabilnym rodzajem.
Sortowanie bąbelkowe, sortowanie przez wybór : Kiedy robisz coś szybko i brudno iz jakiegoś powodu nie możesz po prostu użyć algorytmu sortowania standardowej biblioteki. Jedyną zaletą, jaką mają one w porównaniu z sortowaniem przez wstawianie, jest nieco łatwiejsza implementacja.
Sortowanie bez porównania: W pewnych dość ograniczonych warunkach możliwe jest przełamanie bariery O (N log N) i sortowanie według O (N). Oto kilka przypadków, w których warto spróbować:
Sortowanie według liczenia: gdy sortujesz liczby całkowite z ograniczonym zakresem.
Sortowanie radix: gdy log (N) jest znacznie większy niż K, gdzie K to liczba cyfr podstawy.
Sortowanie zbiorcze: kiedy możesz zagwarantować, że dane wejściowe są w przybliżeniu równomiernie rozłożone.