Si comparas dos elementos vecinos, puedes averiguar si estás en la parte creciente o decreciente de la secuencia. Ahora utiliza la búsqueda binaria para encontrar el vértice.
Con más detalle: Desde el principio sabemos que el índice del vértice se encuentra en algún lugar entre $L=\frac 12$ y $H=n+\frac 12$ donde las letras significan límites bajos y altos. Utilizaré los límites de medio entero para facilitar la exposición; en una implementación práctica los representarías con, por ejemplo, el siguiente entero mayor.
Ahora, si sucede que $H-L=1$ entonces sabemos exactamente dónde está el vértice. El índice del vértice es, por supuesto, un entero, y lo habremos puesto entre corchetes con el medio entero que está por encima y por debajo. Así que en ese caso hemos terminado.
En caso contrario, deja que $M$ sea un semi-integro aproximadamente a medio camino entre $H$ y $L$ -- es decir, o bien $\frac{H+L}{2}$ o $\frac{H+L+1}{2}$ , de tal manera que $M$ es un número entero más $\frac 12$ . Ahora comparamos los dos elementos vecinos $a_{M-\frac 12}$ y $a_{M+\frac 12}$ . Si el primero es mayor, el vértice debe estar entre $L$ y $M$ ; de lo contrario, el vértice se encuentra entre $M$ y $H$ . Por lo tanto, podemos sustituir $L$ o $H$ con $M$ y empezar de nuevo desde el párrafo anterior.
Cada vez que repetimos el bucle, la distancia entre $H$ y $L$ habrá disminuido, por lo que $H-L$ acabará llegando a $1$ el algoritmo termina. De hecho, $H-L$ será aproximadamente reducir a la mitad cada vez que hemos hecho una comparación, por lo que el número de iteraciones será de alrededor de $\log_2 n$ . Esto significa que el número de accesos al array es $2 \log_2 n$ lo que supone una gran mejora con respecto a una exploración lineal.
Se puede mejorar ligeramente con el algoritmo más complicado sugerido por Tony K, pero esto no afectará al asintótica (big-O) del algoritmo.