Ricerca lineare in array con ciclo ottimizzato
Ricerca Lineare (Sequenziale)
Cos'è la ricerca lineare?
La ricerca lineare è uno degli algoritmi più semplici per trovare un elemento all'interno di un array. Funziona controllando ogni elemento dell'array uno dopo l'altro, dalla prima posizione fino all'ultima, finché non trova l'elemento cercato o finisce gli elementi da controllare.
Analisi del codice
Vediamo come funziona questo programma passo per passo:
Dichiarazione delle variabili
int a[10] = {7, 3, 9, 1, 5};
int n = 5;
int valore = 9; // valore cercato
int trovato = -1; // -1 = non trovato
a[10]: un array di 10 posizioni, ma riempiamo solo le prime 5 con i valori {7, 3, 9, 1, 5}n = 5: indica quanti elementi dell'array sono effettivamente utilizzativalore = 9: è il numero che stiamo cercando nell'arraytrovato = -1: questa variabile memorizza la posizione dove troviamo l'elemento. Inizialmente è -1 per indicare "non trovato"
Il ciclo di ricerca
for (int i = 0; i < n && trovato == -1; i++)
if (a[i] == valore)
trovato = i;
Questo ciclo è il cuore dell'algoritmo:
i = 0: iniziamo dalla prima posizione dell'array (posizione 0)i < n: continuiamo finché non abbiamo controllato tutti gli elementitrovato == -1: condizione intelligente! Il ciclo si ferma anche se troviamo l'elemento, perchétrovatonon sarà più uguale a -1if (a[i] == valore): se l'elemento nella posizioneiè uguale al valore cercatotrovato = i: salviamo la posizione dove abbiamo trovato l'elemento
Visualizzazione dell'esecuzione
Vediamo cosa succede passo per passo cercando il valore 9:
| Passo | i | a[i] | a[i] == 9? | trovato |
|---|---|---|---|---|
| 1 | 0 | 7 | No | -1 |
| 2 | 1 | 3 | No | -1 |
| 3 | 2 | 9 | Sì! | 2 |
Il ciclo si ferma qui perché trovato non è più uguale a -1!
Stampa del risultato
if (trovato != -1)
cout << "Il valore " << valore << " e' in posizione " << trovato << endl;
else
cout << "Il valore " << valore << " non e' presente" << endl;
- Se
trovatoè diverso da -1, significa che abbiamo trovato l'elemento e stampiamo la sua posizione - Altrimenti stampiamo che l'elemento non è presente nell'array
Caratteristiche dell'algoritmo
Vantaggi:
- Semplice da capire e implementare
- Funziona su array non ordinati
- Si ferma appena trova l'elemento (grazie alla condizione
trovato == -1)
Svantaggi:
- Può essere lento per array molto grandi
- Nel caso peggiore deve controllare tutti gli elementi
Risultato del programma
Eseguendo questo codice, l'output sarà:
Il valore 9 e' in posizione 2
Ricorda che in informatica si conta sempre da 0, quindi la posizione 2 corrisponde al terzo elemento dell'array!
// RICERCA LINEARE (sequenziale)
#include <iostream>
using namespace std;
int main() {
int a[10] = {7, 3, 9, 1, 5};
int n = 5;
int valore = 9; // valore cercato
int trovato = -1; // -1 = non trovato
// il ciclo si ferma appena trovato diventa diverso da -1
for (int i = 0; i < n && trovato == -1; i++)
if (a[i] == valore)
trovato = i;
if (trovato != -1)
cout << "Il valore " << valore << " e' in posizione " << trovato << endl;
else
cout << "Il valore " << valore << " non e' presente" << endl;
return 0;
}