View Single Post
Old 11-10-2005, 10:05   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Fammi capire...tu hai giò una sequenza ordinata ciclicamente e devi trovare il minimo ai ?

Se è così puoi proprio fare con una ricerca binaria:

int ricercabinaria(int *v, int i, int inizio, int fine)

inizio e fine sono i limiti di ricerca e ti serviranno per calcolarti gli spostamenti (si inizializzano a 0 e N-1 nella prima chiamata)...

La condizione di arresto è questa (attento agli estremi):

if(a[i+1] >= a[i] && a[i-1] > a[i])

attento che non funziona nel caso particolare in cui tutti i numeri siano uguali

Altrimenti vai a valutare due indici per spostarti nella direzione giusta di ricerca:

if(a[inizio + (i - inizio) / 2] >= a[i])

Chiami ricorsivamente la ricerca sull'elemento inizio + (i - inizio) / 2 (attento ai parametri da passare)

ifif(a[i + (fine - i) / 2] >= a[i])

Chiami ricorsivamente la ricerca sull'elemento i + (fine - i) / 2 (attento anche qui ai parametri da passare)
cionci è offline   Rispondi citando il messaggio o parte di esso