Exploración del algoritmo Java: explicación detallada de la búsqueda binaria

La búsqueda binaria es un algoritmo eficiente cuando necesita encontrar un elemento específico en una matriz ordenada. Su complejidad temporal es O (log n) y, en comparación con O (n) de la búsqueda lineal, la búsqueda binaria puede mejorar significativamente la eficiencia de la búsqueda. Este artículo explicará en detalle qué es la búsqueda binaria y cómo implementarla en Java.

Introducción a la búsqueda binaria

La búsqueda binaria, también conocida como búsqueda binaria, es un algoritmo para encontrar el elemento objetivo en una matriz ordenada. Su principio es reducir continuamente a la mitad el rango de búsqueda hasta que se encuentre el elemento objetivo o se determine que el elemento objetivo no existe. Los pasos para la búsqueda binaria son los siguientes:

  1. Inicialice el límite izquierdo para que sea el índice del primer elemento de la matriz y el límite derecho para que sea el índice del último elemento de la matriz.
  2. Calcule el índice medio del elemento central, que es igual a (izquierda + derecha) / 2.
  3. Compare el elemento del medio con el elemento de destino:
  • Si el elemento del medio es igual al elemento de destino, se encuentra el objetivo y se devuelve el índice del elemento del medio.
  • Si el elemento del medio es más grande que el elemento de destino, actualice el límite derecho a mitad - 1 y continúe buscando en la mitad izquierda.
  • Si el elemento del medio es más pequeño que el elemento de destino, actualice el límite izquierdo a mid + 1 y continúe buscando en la mitad derecha.
  1. Repita los pasos 2 y 3 hasta encontrar el elemento objetivo o hasta que el límite izquierdo exceda el límite derecho.

Java implementa la búsqueda binaria

El siguiente es un código de muestra para implementar la búsqueda binaria en Java:

/**
 * 二分查找
 */
public static int binarySearch(int[] intArr,int key){
    
    
    int left = 0;
    int right = intArr.length -1;

    while(left <= right){
    
    
        //计算中间元素的索引
        int mid = (left + right) >>> 1;
        //获取中间元素的值
        int midVal = intArr[mid];
        //比较中间元素和目标元素的值
        //如果中间元素小于目标元素,则将左边界更新为 mid + 1,继续在右半边查找。
        if (midVal < key)
            left = mid + 1;
        //如果中间元素大于目标元素,则将右边界更新为 mid - 1,继续在左半边查找。
        else if (midVal > key)
            right = mid - 1;
        //如果中间元素等于目标元素,则找到目标,返回中间元素的索引。
        else
            return mid;
    }

    //如果循环结束仍未找到目标元素,返回一个负数,表示未找到,通常为-(left + 1)
    return -(left + 1);
}

public static void main(String[] args) {
    
    

    int[] intArray = new int[]{
    
    2,4,5,7,9,11,16,23,45,67};

    System.out.println(binarySearch(intArray,5));
    System.out.println(binarySearch(intArray,23));
    System.out.println(binarySearch(intArray,1));
    System.out.println(binarySearch(intArray,20));
    System.out.println(binarySearch(intArray,110));

}

La salida es:

2
7
-1
-8
-11

En el código anterior, el método binarioSearch acepta una matriz ordenada intArr y la clave del elemento de destino como parámetros, y luego usa el algoritmo de búsqueda binaria para encontrar el índice del elemento de destino en la matriz. Si se encuentra el elemento de destino, se devuelve su índice; de ​​lo contrario, se devuelve un número negativo para indicar que el elemento de destino no existe.

Precauciones

La premisa de la búsqueda binaria es que la matriz debe estar ordenada ; de lo contrario, no funcionará correctamente. Si la matriz no está ordenada, es necesario ordenarla antes de poder utilizar el algoritmo de búsqueda binaria.

Resumir

La búsqueda binaria es un algoritmo de búsqueda eficiente adecuado para matrices ordenadas. Su complejidad temporal es O (log n), donde n es la longitud de la matriz. Debido a que el rango de búsqueda se reduce a la mitad con cada iteración, es más eficiente que los algoritmos de búsqueda simples como la búsqueda lineal, especialmente para matrices ordenadas grandes. Al implementar y comprender cuidadosamente el algoritmo de búsqueda binaria, puede aplicarlo fácilmente en Java para resolver una variedad de problemas de búsqueda.

Supongo que te gusta

Origin blog.csdn.net/weixin_44002151/article/details/132822775
Recomendado
Clasificación