Implementación simple de búsqueda binaria

Simplemente registre la implementación de la búsqueda binaria

Directorio de artículos

prefacio

1. ¿Qué es la búsqueda binaria?

2. Implementación del código

Resumir


prefacio

Un día, Liuhua fue a una empresa para una entrevista y el entrevistador dijo: "Déle una matriz ordenada de números enteros y un valor, y puede escribir una consulta simple para devolver el subíndice". Saque el teclado y escriba un bucle for para recorrer la consulta. Cuando el entrevistador lo vio, asintió y le dijo con seriedad: "Joven, veo que sus huesos están bien. Vuelva y espere las noticias. ¡Creo que tiene una gran oportunidad! "Después de escuchar esto, se fue a su casa emocionado y esperó las noticias, pensando: "Es solo una entrevista, pero eso es todo ..." A partir de ahí, no hubo más seguimiento.

1. ¿Qué es la búsqueda binaria?

Dado un valor, consulte una matriz de enteros ordenados , como [1, 2, 3, 4, 5, 6, 7, 8], necesita encontrar la posición (subíndice) correspondiente a 5. Seleccione el número en el medio de la matriz (4 aquí) y compárelo con el valor objetivo que se buscará, y devuelva la respuesta (subíndice) directamente si son iguales. Si no, se deben considerar dos casos:

1) Si el número del medio es mayor que el valor objetivo, todos los números a la derecha del número del medio son mayores que el valor objetivo , todos excluidos

2) Si el número del medio es menor que el valor objetivo, todos los números a la izquierda del número del medio son menores que el valor objetivo , todos excluidos

Entonces sigue así.

Nota: Aquí se ha enfatizado muchas veces que es una matriz de enteros ordenados. Después de todo, si no está ordenado, no se puede determinar que el número del otro lado del número del medio puede ser completamente mayor que (menor que) el número de destino y luego excluirse . En segundo lugar, el valor objetivo de la consulta solo puede ser uno , no múltiple.

2. Implementación del código

La apertura y el cierre de la búsqueda binaria son diferentes, y los métodos de iteración correspondientes también son diferentes.Existen los siguientes dos métodos:

  • Cerrar a la izquierda y cerrar a la derecha[left, right]

  • Izquierda cerrada derecha abierta [izquierda, derecha)

 El código de cierre a la izquierda y a la derecha es el siguiente:

    private static int binarySearch(int target, int[] arry) {
        int left = 0, right = arry.length - 1;
        while (left <= right){
            int mid = (left + right) >>> 1;
            if (arry[mid] == target){
                return mid;
            } else if (arry[mid] < target) {
                left = mid + 1;
            } else if (arry[mid] > target) {
                right = mid - 1;
            }
        }
        return -1;
    }

La diferencia entre cerrado a la izquierda y abierto a la derecha es que el límite derecho de la matriz selecciona la longitud de la matriz, mientras que el límite de cerrado a la izquierda y cerrado a la derecha selecciona la longitud de la matriz -1. También está el juicio de la condición del bucle. Para obtener más información, consulte: [Búsqueda binaria] Diagrama detallado_Blog de Charon_cc-Blog de CSDN

el código se muestra a continuación:

    private static int binarySearch(int target, int arry[])
    {
        int left = 0;
        int right = arry.length; //定义target在左闭右开的区间里,即[left, right)
        while (left < right) {	//因为left = right的时候,在[left, right)区间上无意义
            int middle = (left + right) >>> 1;
            if (arry[middle] > target) {
                right = middle; //target 在左区间,在[left, middle)中 
            } else if (arry[middle] < target) {
                left = middle + 1;
            } else {
                return middle;
            }
        }
        // 没找到就返回-1
        return -1;
    }

prueba:

Dada una matriz de enteros ordenada (ascendente) nums con n elementos y un objetivo de valor objetivo, escriba una función para buscar el objetivo en nums y devuelva el subíndice si existe el valor objetivo; de lo contrario, devuelva -1.

Ejemplo uno:

Entrada: nums = [-1,0,3,5,9,12], target = 9
Salida: 4
Explicación: 9 aparece en nums con subíndice 4

resultado:

Ejemplo dos:

Entrada: nums = [-1,0,3,5,9,12], destino = 2
Salida: -1
Explicación: 2 no existe en nums, por lo que devuelve -1

resultado:


Resumir

Los dos puntos más importantes de la búsqueda binaria son la condición del bucle y el subsiguiente problema de asignación de intervalos.

Los dos están interrelacionados y se afectan entre sí, por lo que deben unificarse, si los dos no están unificados, surgirán problemas.

Por lo tanto, la condición del bucle y el problema de asignación deben estar unificados, es decir, el bucle invariante.

Supongo que te gusta

Origin blog.csdn.net/weixin_58403235/article/details/129843775
Recomendado
Clasificación