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
x
jest 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
complex
wektory nie są jeszcze obsługiwane.