|
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)
|