No, no es.
Si estoy en lo cierto, entonces está intentando implementar una búsqueda ternaria muy similar a la búsqueda binaria pero con 3 particiones en cada paso de la búsqueda.
Si recuerda, la complejidad de la búsqueda binaria es [matemática] O (\ log_2 n) [/ matemática] debido a su propiedad de reducir a la mitad la lista en cada paso.
- ¿Existe un libro que enseñe algoritmos, estructuras de datos y otros conceptos básicos de informática de una manera divertida?
- ¿Qué es un algoritmo hash?
- ¿Encontrar la complejidad temporal de los algoritmos está relacionado con las matemáticas discretas?
- ¿Cuál es el algoritmo de clave pública y privada?
- Cómo calcular la similitud semántica entre un automóvil y una bicicleta mediante el algoritmo Jian y Conrath
Del mismo modo, la búsqueda ternaria debe tener una complejidad de [matemáticas] O (\ log_3 n) [/ matemáticas]. Pero eso no está sucediendo en el código que ha proporcionado debido a un cálculo incorrecto de mid1 y mid2. Aunque finalmente puede encontrar los datos en la lista, pero no está reduciendo la lista a un tercio de la sublista en cada paso. Por lo tanto, está realizando más número de iteraciones de búsqueda que la búsqueda binaria. Debe calcular valores medios como este para corregir su búsqueda ternaria:
int mid1 = lbound + (ubound – lbound) / 3;
int mid2 = lbound + (2 * (ubound – lbound)) / 3;