Ordinamento di un array di dati è uno dei classici problemi di informatica , e quindi dovrebbe venire come nessuna sorpresa che una grande varietà di metodi per l'ordinamento in Turbo C e di altri linguaggi sono stati concepiti . Si va dai metodi inefficienti , ma semplice da implementare a metodi molto più veloce ma più complesso . Il miglior algoritmo per una situazione dipende dalla dimensione prevista del set di dati da ordinare e l'importanza di efficienza . Bubble Sort
Il Bubble Sort è il più semplice , e più lento , algoritmo di ordinamento . Si procede semplicemente attraverso l'array , confrontando l'elemento corrente all'elemento direttamente di fronte. Se questi due elementi sono in ordine, si passa posti . Quando il Bubble Sort raggiunge la fine , esso controlla per vedere se qualcosa luoghi modificati. Se così fosse , si ricomincia da capo. Si continua in loop attraverso l'array fino a quando non riesce a completare un passaggio completo senza fare alcun swapping. In media , questo richiede O ( n ² ) tempo, ma se il dato è noto per essere molto quasi ordinato , con forse solo elemento fuori posto , può funzionare in O ( n) . Quindi è un buon metodo per piccoli array che non sono allineati spesso o array più grandi che sono noti per essere già ordinati ( o quasi ) la maggior parte del tempo .
Selection Sort
ordinamento per selezione è un po 'più raffinato del Bubble Sort . L'algoritmo procede attraverso l'intera matrice di dati per trovare l'elemento più piccolo . Dovunque che elemento è , ha la sua posizione scambiato con il primo elemento , e un contatore rileva che il primo elemento della matrice è conosciuto per essere adeguatamente risolto . Si procede poi attraverso l' intero array nuovo, tranne per il primo elemento ( che è noto per essere nel posto giusto . ) Quando trova l'elemento più basso , si sposta nella seconda posizione e aumenta il contatore per indicare che i primi due elementi siano noti da ordinare. Nel complesso, il Selection Sort lavora a O (n ²) tempo , ma ha un vantaggio: al più, solo n- 1 cambia mai passato per l'array , dal momento che ogni elemento viene spostato solo se la sua posizione è nota . Questo lo rende un buon algoritmo in alcune situazioni esotiche dove la scrittura dei dati nella memoria prende drasticamente più lungo di leggerlo .
Quicksort
Come suggerisce il nome , il QuickSort è veloce . In media , si può eseguire un ordinamento a O (n log n). Ma è molto più complesso di molti altri programmi e richiede che lo sviluppatore conosce un po ' i dati nella matrice prima mano . In primo luogo , deve essere scelto un "valore pivot" . Questo è il valore che lo sviluppatore crede è vicino alla mediana di tutti i valori nella matrice . Il migliore è il valore pivot , il più veloce è il Quicksort si esibirà . Quindi , la matrice è divisa in due gruppi: quelli al di sopra del valore pivot vengono spostati sul lato destro , e quelli al di sotto del valore pivot vengono spostati verso il lato sinistro . Speriamo che le due parti sono vicini a parità di dimensioni, ma non hanno bisogno di essere esattamente lo stesso . Infine , l'algoritmo quicksort ricomincia da zero su ogni lato , con il nuovo perno valori scelti , e queste due metà vengono divise in quarti . Quando il quicksort ha suddiviso la matrice in modo che ogni sezione ha un solo valore , l'array è stato ordinato .
Come algoritmi ricorsivi più , questo può essere difficile da visualizzare , quindi si sono incoraggiati a vedere il passo- passo - esempio dato nel terzo riferimento .