Modo de búsqueda binaria no recursiva

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.

Supongo que te gusta

Origin blog.csdn.net/qq_22155255/article/details/113869073
Recomendado
Clasificación