szczegóły
sort jest ogólną funkcją, dla której można pisać metody, a sort.int jest wewnętrzną metodą, która jest zgodna z S, jeśli używane są tylko trzy pierwsze argumenty.
domyślna sort metoda korzysta z order dla klasowanych obiektów, które z kolei korzystają z ogólnej funkcji xtfrm (I może być wolna, chyba że xtfrm metoda zdefiniowano lub is.numeric(x) jest prawdziwe).,
wartości złożone są sortowane najpierw według części rzeczywistej, a następnie części urojonej.
z wyjątkiem metody"radix", kolejność sortowania wektorów znaków zależy od sekwencji zestawiania używanych ustawień regionalnych: patrzComparison. Kolejność sortowania czynników jest kolejnością ich poziomów (która jest szczególnie odpowiednia dla czynników uporządkowanych).
Jeślipartial nie jestNULL, przyjmuje się, że zawiera indeksy elementów wyniku, które mają być umieszczone w ich prawidłowych pozycjach w sortowanej tablicy przez sortowanie częściowe., Dla każdej wartości wyniku w określonej pozycji, każda wartość mniejsza od tej jest gwarantowana, aby mieć mniejszy indeks w posortowanej tablicy, a wszelkie wartości, które są większe, są gwarantowane, aby mieć większy indeks w posortowanej tablicy. (Dotyczy to wydajności, a wiele opcji nie jest dostępnych dla sortowania częściowego. Jest to znacznie bardziej efektywne, jeśli partial ma kilka elementów, a pełne sortowanie jest wykonywane (szybkie sortowanie, jeśli to możliwe), jeśli jest więcej niż 10.) Nazwy są odrzucane do częściowego sortowania.,
metoda "quick" używa implementacji Singletona (1969) metody Quicksort Hoare i jest dostępna tylko wtedy, gdy x jest numeryczna (Podwójna lub całkowita) i partial jest NULL. (Dla innych typówx Shellsort jest używany, po cichu.) Jest zwykle nieco szybszy niż Shellsort (być może 50% szybszy na wektorach o długości miliona i dwa razy szybszy na miliard), ale ma słabą wydajność w rzadkim najgorszym przypadku., (Modyfikacja Peto za pomocą pseudolosowego punktu środkowego jest używana, aby uczynić najgorszy przypadek rzadszym.) Nie jest to stabilny Rodzaj, a krawaty mogą być zmieniane.
metoda "radix" polega na prostym hashowaniu, aby skalować czas liniowo z rozmiarem wejściowym, tzn. jego asymptotyczna złożoność czasowa wynosi O (n). Konkretny wariant i jego implementacja pochodziły z danych.pakiet tabeli i są ze względu na Matt Dowle i Arun Srinivasan., Dla małych wejść (< 200) implementacja używa sortowania wstawiania (O(n^2)), które działa na miejscu, aby uniknąć nadmiarowego przydziału sortowania radix. Dla wektorów całkowitych o zasięgu mniejszym niż 100 000 przełącza się na prostsze i szybsze liniowe sortowanie czasu. We wszystkich przypadkach rodzaj jest stabilny; kolejność powiązań jest zachowana. Jest to metoda domyślna dla wektorów i czynników całkowitych.
metoda"radix" generalnie przewyższa inne metody, szczególnie dla wektorów znaków i małych liczb całkowitych., W porównaniu do szybkiego sortowania, jest nieco szybsze dla wektorów o dużych wartościach całkowitych lub rzeczywistych (ale w przeciwieństwie do szybkiego sortowania, radix jest stabilny i obsługuje wszystkie opcje ). Implementacja jest o rząd wielkości szybsza niż sortowanie powłoki dla wektorów znaków, częściowo dzięki sprytnemu wykorzystaniu wewnętrznej tabeli CHARSXP.
istnieją jednak pewne zastrzeżenia dotyczące sortowania radix:
-
Jeśli
xjest wektoremcharacter, wszystkie elementy muszą mieć to samo kodowanie., Obsługiwane są tylko kodowania UTF-8 (w tym ASCII) i Latin-1. Zestawienie zawsze następuje po ustawieniach regionalnych „C”. -
Długie wektory (z więcej niż 2^32 elementami) i
complexwektory nie są jeszcze obsługiwane.