Powiel możliwe:
which type of sorting is used in the function sort()?Czy std :: sort implementuje Quicksort?
Czy std :: sort wdrożyć quicksort?
Powiel możliwe:
which type of sorting is used in the function sort()?Czy std :: sort implementuje Quicksort?
Czy std :: sort wdrożyć quicksort?
Myślę, że tak. std :: list ma metodę sortowania lub możesz wywołać sortowanie, z którego pobiera 2 iteratory, zaczynając i kończąc.
To zależy od implementacji biblioteki. Wdrożenia mergesort są najczęstsze, ponieważ jest najgorszy przypadek O (N * logN), podczas gdy quicksort może pogorszyć się do O (N^2).
This potwierdza to.
Ponadto, o ile mi wiadomo, na wejściu używany jest pewien rodzaj heurystyki, aby zdecydować, który algorytm będzie najlepszy do użytku wewnętrznego, aby różne połączenia z std::sort()
mogły korzystać z różnych algorytmów.
Może to być losowa wersja quicksort, więc argument O najgorszego przypadku O (N^2) nie byłby dla tego przypadku. – LunaticSoul
Z Wikipedii -
Konkretny algorytm sortowania nie jest upoważniony i może zmieniać się w poprzek wdrożeń. Sort Wiki Link
Chociaż w tym przypadku jest to prawdopodobnie prawda, byłbym bardzo ostrożny w tym, co przeczytałem na Wikipedii. Jeśli chodzi o referencję, powołuj się na standard. – ereOn
Używa quicksort lub introsort.
powodu wysokiej najgorszym złożoności quicksort (N^2), a także stosunkowo trudny do wykonania, na linklist. Myślę, że nie zostanie to zrobione przy użyciu quicksorta
'std :: sort' nie działa na listach połączonych, więc nie jest problemem. –
Istnieją dwa algorytmy, które są tradycyjnie używane.
std::sort
najprawdopodobniej używać QuickSort, a przynajmniej wariacja na Quicksort nazywa IntroSort, które „degeneratów” do HeapSort gdy rekurencji jest zbyt głęboka.
od standardu:
Złożoność: O (log N (n)) porównania.
std::stable_sort
najczęściej używa MergeSort, ze względu na wymaganie stabilności. Należy jednak pamiętać, że MergeSort wymaga dodatkowej przestrzeni, aby być wydajnym.
od standardu:
Złożoność: To jest co najwyżej N log (N) porównań; jeśli dostępna jest wystarczająca ilość dodatkowej pamięci, jest to N log (N).
muszę jeszcze zobaczyć std::sort
realizacji TimSort który jest obiecujący i został przyjęty w Pythonie (spreparowany przez nią w rzeczywistości), Java i Android (do tej pory).
@ maxim-yegorushkin: Artykuł w Wikipedii również wydaje się twierdzić, że introsort przełącza się na sortowanie wstawek zamiast heapsortu:/ http://en.wikipedia.org/wiki/Sort_(C%2B%2B) "Standard GNU C++ na przykład biblioteka wykorzystuje hybrydowy algorytm sortowania: introsort jest wykonywany jako pierwszy, do maksymalnej głębokości podanej przez 2 × log2 n, gdzie n jest liczbą elementów, po którym następuje sortowanie wstawiania na wynik. " –
Wikipedia wskazuje, że określony algorytm nie został określony. – Sapph