Ogólnie rzecz biorąc, istnieją algorytmy sortowania , takie jak sortowanie wstawiane, sortowanie bąbelkowe i sortowanie selekcyjne, których zwykle powinieneś używać tylko w szczególnych okolicznościach; Quicksort, który jest najgorszym przypadkiem O ( n 2 ), ale dość często O ( n log n ) z dobrymi stałymi i właściwościami i który może być stosowany jako procedura sortowania ogólnego przeznaczenia; O ( n log n ) algorytmów, takich jak seryjnej-sortowania i sterty rodzaju, które są również dobre algorytmy ogólnego zastosowania do sortowania; i O ( nO(n2)O(n2)O(nlogn)O(nlogn) lub liniowe algorytmy sortowania dla list liczb całkowitych, takich jak podstawa, wiaderko i zliczanie, które mogą być odpowiednie w zależności od charakteru liczb całkowitych na twoich listach.O(n)
Jeśli elementy na liście są takie, że wszystko, co o nich wiesz, to łączna relacja między nimi, wówczas optymalne algorytmy sortowania będą miały złożoność . Jest to dość fajny wynik, dla którego powinieneś być w stanie łatwo znaleźć szczegóły w Internecie. Algorytmy liniowego sortowania wykorzystują dalsze informacje o strukturze elementów do sortowania, a nie tylko całkowitą relację kolejności między elementami.Ω(nlogn)
Mówiąc bardziej ogólnie, optymalność algorytmu sortowania zależy ściśle od założeń, jakie możesz poczynić na temat rodzaju list, które zamierzasz sortować (a także od modelu maszyny, na którym algorytm będzie działał, co może sprawić, że sortowanie w jeszcze inny sposób będzie złe algorytmy najlepszym wyborem; rozważ sortowanie bąbelkowe na maszynach z taśmą do przechowywania). Im silniejsze są twoje założenia, tym więcej algorytmów można wyciąć. Przy bardzo słabych założeniach dotyczących tego, jak skutecznie można określić „sortowanie” listy, optymalna złożoność najgorszego przypadku może nawet wynosić .Ω(n!)
Ta odpowiedź dotyczy tylko zawiłości. Rzeczywiste czasy działania implementacji algorytmów będą zależeć od dużej liczby czynników, które trudno jest uwzględnić w jednej odpowiedzi.