Dilemma Int

di il
2 risposte

Dilemma Int

Salve, questo programma che esegue una ricerca di un elemento in un array di numeri interi ordinato in modo crescente non capisco a cosa si riferisce e come mai sono stati definiti gli "Int l" e "Int r". Qualcuno può spiegarmi la prima parte di codice? Quella del "Int ricerca". Grazie. L’algoritmo di ricerca confronta, ad ogni iterazione, l’elemento da cercare con l’elemento centrale nell’array. Se il confronto fallisce si ripete la ricerca su una delle due metà dell’array.


#include <iostream>
#define N 11
using namespace std;

int ricerca(int v[], int dato, int l, int r) {
	while (r >= l)
	{
		int centro = (l + r) / 2;
		if (dato == v[centro]) return centro;
		if (dato < v[centro]) r = centro - 1;
		else l = centro + 1;
	}

	return -1;
}

int main() {

	int risultato, valore, V[N], i, x;
	for (i = 0; i < N; i++)
		V[i] = (1 + i)*rand() % 201;
	
	cout << "I valori del vettore sono: ";
	for (i = 0; i < N; i++)
		cout << V[i] << " ";
	cout << endl; 

	do {
		cout << "Inserire valore da cercare o 0 per terminare ricerca" << endl;
		cin >> x;
		valore = x;
		risultato = ricerca(V, valore, 0, N - 1);
		if (risultato >= 0)
			cout << valore << " trovato" << endl;
		else
			cout << valore << " non trovato" << endl;
	} while (valore != 0);

	return 0;

}

2 Risposte

  • Re: Dilemma Int

    È una ricerca dicotomica. Cerca su internet è spiegato ovunque
  • Re: Dilemma Int

    All'inizio l e r contengono l'indice dell'estremo sinistro (ovvero il primo elemento) e dell'estremo destro (l'ultimo elemento). Infatti se guardi nel main vengono passati come l e r i valori 0 e n-1 (non è n perché parte da 0 e non da 1).
    Con la formuletta: centro= (l+r)/2 si trova il punto medio, ovvero il centro (a meno di approssimazioni, nel caso la lunghezza del vettore sia pari).

    Se il dato si trova a destra del centro, verrà effettuata la ricerca nel semivettore che va dal centro a r, che ha come indice l l'elemento subito dopo il centro.
    altrimenti la ricerca avviane nel semivettore a sinistra del centro, che inizia da l e ha come r l'indice dell'elemento che viene subito prima del centro.
Devi accedere o registrarti per scrivere nel forum
2 risposte