2011-02-18 37 views

Odpowiedz

-3

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.

3

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.

+1

Może to być losowa wersja quicksort, więc argument O najgorszego przypadku O (N^2) nie byłby dla tego przypadku. – LunaticSoul

0

Z Wikipedii -

Konkretny algorytm sortowania nie jest upoważniony i może zmieniać się w poprzek wdrożeń. Sort Wiki Link

+0

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

-3

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

+4

'std :: sort' nie działa na listach połączonych, więc nie jest problemem. –

32

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).

+0

@ 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. " –

Powiązane problemy