L'ordinamento per selezione (Selection Sort) è un algoritmo quadratico, sia nel caso peggiore che in quello medio, in place, cioè non richiede memoria extra.
In particolare effettua circa N^2/2 confronti ed N scambi. Se esamini il codice dell'algoritmo in C (ad esempio):
codice:
/* SELECTION SORT */
void selectionSort( Item * const vector, const size_t size )
{
unsigned i, j, small;
for( i = 0; i != size-1; ++i )
{
small = i;
for( j = i+1; j != size; ++j )
{
if( vector[ j ] < vector[ small ] )
small = j;
}
// scambia gli elementi del vettore in posizione i e small
swap( vector, small, i );
}
}
Si nota come per ogni i c'è uno scambio e N-i confronti (dove N è il numero di elementi dell'array), per un totale di N-1 scambi e N(N-1)/2 confronti (quindi O(n^2)). Osservazioni che non dipendono dalla natura dei dati in ingresso.
L'unica cosa che dipende dalla tipo di input è il numero di volte che viene aggiornato il valore della variabile small, nel caso peggiore questo numero può essere quadratico, mentre nel caso medio (non saprei però dimostrartelo) vale O(N logN ).