Details
sort
è una funzione generica per la quale è possibile scrivere metodi, esort.int
è il metodo interno che è compatibile con S se vengono utilizzati solo i primi tre argomenti.
default sort
metodo fa uso di order
per classificare gli oggetti, che a sua volta fa uso di una generica funzione xtfrm
(e può essere lento, a meno che un xtfrm
metodo è stato definito o is.numeric(x)
è vero).,
I valori complessi vengono ordinati prima per la parte reale, quindi per la parte immaginaria.
Ad eccezione del metodo"radix"
, l’ordinamento per i vettori di caratteri dipenderà dalla sequenza di raccolta delle impostazioni locali in uso: vedereComparison
. L’ordinamento per i fattori è l’ordine dei loro livelli (che è particolarmente appropriato per i fattori ordinati).
Separtial
non èNULL
, viene preso per contenere indici di elementi del risultato che devono essere collocati nelle loro posizioni corrette nell’array ordinato mediante ordinamento parziale., Per ciascuno dei valori di risultato in una posizione specificata, tutti i valori più piccoli di quello sono garantiti per avere un indice più piccolo nella matrice ordinata e tutti i valori che sono maggiori sono garantiti per avere un indice più grande nella matrice ordinata. (Questo è incluso per l’efficienza e molte delle opzioni non sono disponibili per l’ordinamento parziale. È solo sostanzialmente più efficiente se partial
ha una manciata di elementi, e viene eseguito un ordinamento completo (un Quicksort se possibile) se ce ne sono più di 10.) I nomi vengono scartati per l’ordinamento parziale.,
Metodo "quick"
utilizza Singleton (1969), con l’attuazione di Hoare Quicksort metodo ed è disponibile solo quando x
è numerico (doppia o intero) e partial
è NULL
. (Per altri tipi di x
Shellsort viene utilizzato, silenziosamente.) Normalmente è un po ‘ più veloce di Shellsort (forse il 50% più veloce su vettori di lunghezza un milione e due volte più veloce a un miliardo) ma ha scarse prestazioni nel raro caso peggiore., (La modifica di Peto usando un punto medio pseudo-casuale viene utilizzata per rendere il caso peggiore più raro.) Questo non è un tipo stabile e i legami possono essere riordinati.
Metodo "radix"
si basa su un semplice hashing per scalare il tempo linearmente con la dimensione dell’input, cioè la sua complessità temporale asintotica è O(n). La variante specifica e la sua implementazione hanno avuto origine dai dati.pacchetto tabella e sono dovuti a Matt Dowle e Arun Srinivasan., Per input di piccole dimensioni (< 200), l’implementazione utilizza un ordinamento di inserimento(O (n^2)) che opera sul posto per evitare l’overhead di allocazione dell’ordinamento radix. Per i vettori interi di intervallo inferiore a 100.000, passa a un ordinamento lineare di conteggio del tempo più semplice e veloce. In tutti i casi, l’ordinamento è stabile; l’ordine dei legami è preservato. È il metodo predefinito per vettori interi e fattori.
Il metodo "radix"
generalmente supera gli altri metodi, specialmente per i vettori di caratteri e i piccoli interi., Rispetto a quick sort, è leggermente più veloce per i vettori con valori interi o reali di grandi dimensioni(ma a differenza di quick sort, radix è stabile e supporta tutte le opzionina.last
). L’implementazione è ordini di grandezza più veloce dell’ordinamento della shell per i vettori di caratteri, in parte grazie all’uso intelligente della tabella CHARSXP
interna.
Tuttavia, ci sono alcuni avvertimenti con l’ordinamento radix:
-
Se
x
è un vettorecharacter
, tutti gli elementi devono condividere la stessa codifica., Sono supportate solo le codifiche UTF-8 (tra cui ASCII) e Latin-1. Le regole di confronto seguono sempre le impostazioni locali “C”. -
I vettori lunghi (con più di 2^32 elementi) e
complex
non sono ancora supportati.