Algoritmo de búsqueda binaria (no recursivo)
En primer lugar, debemos tener claros los requisitos previos para utilizar nuestro algoritmo de búsqueda binaria:
El método de búsqueda binaria solo es adecuado para buscar a partir de una secuencia ordenada de números (como números y letras, etc. ) y luego buscar después de ordenar la secuencia de números.
La idea de la búsqueda binaria
La búsqueda binaria usará el pensamiento recursivo , por supuesto, también hay métodos no recursivos, aprenderé por separado
1. Primero determine el subíndice del medio de la matriz mid mid = (izquierda + derecha) / 2
2. Compare findValue con nuestro arr [mid]
Si findValue> arr [mid], búscalo de forma recursiva a la derecha
Si findValue <arr [mid], busque de forma recursiva a la izquierda
Si lo encuentras, regresa
¿Cuál es nuestra salida recursiva (condición final)?
1. Lo encontré, regrese y salga
2. Cuando se recupera toda la matriz, no se encuentra findValue, y necesitamos finalizar la recursividad, cuando nuestra izquierda> derecha significa que ha terminado.
¿Cómo lo encontramos de forma no recursiva?
Código no recursivo
public class BinnarySearchNoRecur {
public static void main(String[] args) {
int arr[] = {
1,3,8,10,11,67,100};
int index = binnarySearch(arr, 11);
System.out.println(index);
}
/**
//二分查找的非递归实现
* @param arr 待查找数组 该数组升序
* @param target 待查找的值
* @return 找到返回对应下标,没找到返回-1
*/
public static int binnarySearch(int[] arr,int target){
int left = 0;
int right = arr.length-1;
while(left<=right){
//可以继续查找
int mid = (left + right) / 2;
if(arr[mid] == target){
return mid;
}else if(arr[mid] > target){
right = mid - 1;//向左边查找
}else{
left = mid + 1;//向右边查找
}
}
return -1;
}
}
Descubrimos que no hay recursividad previa a la izquierda y recursividad a la derecha. Hemos pasado el ciclo while para controlar nuestro método para continuar, cambiando dinámicamente el valor de nuestra izquierda y derecha para lograr el mismo efecto de recursión.