18.08.2013 Views

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

}<br />

}<br />

a = m + 1;<br />

else<br />

b = m - 1;<br />

return -1;<br />

Lo svantaggio è che gli elementi del vettore devono essere ordinati, e questo comporta un onere<br />

di calcolo “a monte” dell’algoritmo di ricerca.<br />

19.2 L’ordinamento<br />

Un algoritmo di ordinamento ha lo scopo di ordinare un insieme di valori. Per il funzionamento<br />

di un algoritmo di ordinamento, deve essere possibile:<br />

• mantenere gli elementi in un opportuno vettore che ne conservi l’ordine<br />

• stabilire una relazione d’ordine tra due elementi dell’insieme da ordinare<br />

• scambiare due elementi qualsiasi<br />

Tipicamente si tratta di ordinare valori numerici, ma questi possono essere visti come chiavi<br />

di strutture dati complesse, che ne <strong>per</strong>mettono quindi l’ordinamento.<br />

19.2.1 Bubblesort<br />

Uno dei più semplici esempi di algoritmo di ordinamento è il seguente algoritmo, il bubble sort 2 :<br />

void bubblesort(int l[], int n)<br />

{<br />

int i, j;<br />

}<br />

for (i = 0; i < n; i++) {<br />

for (j = i+1; j < n; j++) {<br />

if (l[i] > l[j]) {<br />

swap(&l[i], &l[j]);<br />

}<br />

}<br />

}<br />

Vengono in questo caso scanditi tutti gli elementi del vettore e vengono confrontati con tutti i<br />

seguenti, e in caso il test dica che l’ordinamento non è quello desiderato, i valori vengono scambiati.<br />

Così facendo, i valori vengono man mano spostati rispettando l’ordinamento reciproco.<br />

2 Vedi file di esempio bubblesort.c.<br />

177

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!