Implementazioni di algoritmi/Ricerca dicotomica: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Etichette: Modifica da mobile Modifica da web per mobile
Riga 56:
</source>
 
===Implementazione in [[C++]] versione non ricorsiva===
 
<source lang="c">
 
// lista l'array su cui effettuare la ricerca
//#include <vettore.h>
// n numero elementi della lista
// x chiave da ricercare
// N.B.: questa implementazione è valida solo se la lista contiene dati numerci (int)
// per estenedere la ricerca ad altri tipi di dati occorre riportare alcune
// modifiche sui tipi di dati e sulle if di comparazione.
/**
// buon lavoro!
@brief ricercaBinariaNonRicorsiva
@param lista vettore in entrata di cui controllare la presenza di X
@param x elemento di cui controllare la presenza
*/
 
intbool ricercaBinariaNonRicorsiva(vector<int> &lista[], int n, int x)
{
int pi,uf,m;
/**i=posizione iniziale,f=posizione finale,m=posizione media tra iniziale e finale*/
p = 0;
 
u = n-1;
 
while(p<=u) {
Int m n= lista.size(p+u)/2;
/**Definisco la dimensione del vettore*/
if(lista[m]==x)
 
return m; // valore x trovato alla posizione m
i = if(lista[m]<x)0;
/**posizione iniziale del vettore*/
p = m+1;
 
else
uf = mn-1;
/*Indice in posizione finale del vettore*/
}
// se il programma arriva a questo punto vuol dire che
while(pI<=uf) {
// il valore x non è presente in lista, ma se ci fosse
 
// dovrebbe trovarsi alla posizione u (nota che qui p==u)
m = (i+f)/2;
return -1;
 
/**faccio la media tra posizione iniziale e finale*/
 
if(lista[m]==x)
return true;
 
/**Se trovo il valore restituisco valore true*/
 
 
if(lista[m]<x)
pi = m+1;
 
/**se l’elemento in posizione m è minore dell’elemento da trovare la posizione di partenza diventa la posizione media del vettore +1 */
 
else
u = n f=m-1;
 
/**altrimenti (essendo maggiore) la posizione finale diventa la metà-1*/
 
 
/**se il programma arriva a questo punto vuol dire che il valore x non è presente in lista, ma se ci fosse,dovrebbe trovarsi alla posizione f (nota che qui i==f)*/
 
return -1false;
}
 
</source>
//Con questa ricerca riduco il vettore ad ogni test di metà quindi farò al massimo log2(n) tentativi
 
===Implementazione in [[Java]] versione non ricorsiva===