Ottimizzare C++/Tecniche generali di ottimizzazione/Ordinamento: differenze tra le versioni
Ottimizzare C++/Tecniche generali di ottimizzazione/Ordinamento (modifica)
Versione delle 12:28, 19 giu 2008
, 15 anni faRiportate modifiche da en.wikibooks
m (Bot: Aggiungo: en:Optimizing C++/General optimization techniques/Sorting) |
m (Riportate modifiche da en.wikibooks) |
||
L'algoritmo ''counting sort'' ha complessità O(N+M), dove N è il numero di elementi da ordinare e M è il range delle chiavi di ordinamento, cioè la differenza tra la chiave massima e la chiave minima.
Nel caso in cui si vogliano ordinare N elementi la cui chiave è un numero intero appartenente a un intervallo contenente un numero di valori non
In alcuni casi è più veloce anche per range più grandi
Questo algoritmo può essere usato anche per un ordinamento parziale; per esempio, se la chiave è un intero compreso tra zero e un miliardo, si può ordinare solamente in base al byte più significativo della chiave, così da ottenere un ordine tale per cui per ogni n vale la formula <math>a_n < a_{n + 1} + 256*256*256. </math>
=== Partizionamento e ordinamento stabili ===
'''Se devi partizionare
In STL c'è l'algoritmo di partizionamento <code>std::stable_partition</code>, che è leggermente più lento dell'algoritmo <code>std::partition</code>; e c'è l'algoritmo di ordinamento <code>std::stable_sort</code>, che è leggermente più lento dell'algoritmo <code>std::sort</code>.
=== Partizionamento d'ordine ===
'''Se devi solo individuare i primi N elementi di una sequenza, o l'N-esimo elemento di una sequenza, usa un algoritmo di partizionamento d'ordine, invece di
In STL c'è l'algoritmo <code>std::nth_element</code>, che, pur essendo leggermente più lento dell'algoritmo <code>std::stable_partition</code>, è notevolmente più veloce dell'algoritmo <code>std::sort</code>, in quanto ha complessità O(N) invece di O(N log(N)).
|