Búsqueda de interpolación usando Java

1. ¿Qué es la búsqueda de interpolación?

Búsqueda de interpolación, un método de búsqueda para listas ordenadas. La búsqueda por interpolación es un método de búsqueda basado en la comparación entre la clave de búsqueda y la clave de registro más grande y más pequeña en la tabla de búsqueda. La búsqueda de interpolación se basa en la búsqueda binaria, que mejora la selección de puntos de búsqueda para la selección adaptativa y mejora la eficiencia de búsqueda.

2. Requisitos de algoritmo

  1. La tabla de búsqueda es una tabla ordenada almacenada secuencialmente
  2. Las palabras clave de los elementos de datos se distribuyen uniformemente en la tabla de búsqueda

Tercero, el proceso de búsqueda.

Similar a la búsqueda binaria, la diferencia es que la búsqueda de interpolación comienza desde el punto de selección adaptativo

  1. Suponiendo que los elementos en la tabla están ordenados en orden ascendente, compare las palabras clave registradas en el medio de la tabla con las palabras clave de búsqueda. Si las dos son iguales, la búsqueda es exitosa;
  2. De lo contrario, el valor medio más una posición determinada del algoritmo se usa para dividir la tabla en dos subtablas. Si la clave registrada en la posición intermedia es mayor que la tecla de búsqueda, se busca más la subtabla anterior, de lo contrario se busca más la siguiente subtabla.
  3. Repita el proceso anterior hasta que encuentre un registro que satisfaga la condición, de modo que la búsqueda sea exitosa, o hasta que la tabla secundaria no exista, y la búsqueda no sea exitosa en este momento.

Cuatro, implementación de código

public class InsertValueSearch {

    public static void main(String[] args) {
        int[] array = new int[100];
        for (int i = 0; i < 100;i++){
            array[i] = i+1;
        }

        int resultIndex = insertValueSearch(array,0,array.length-1,86);
        System.out.println("下标为:"+resultIndex);
    }

    /**
     * @param arrays 有序数组
     * @param left 最小索引
     * @param right 最大索引
     * @param findValue 查找值
     * @return 查找值的下标
     */
    public static int insertValueSearch(int[] arrays,int left,int right,int findValue){
        //判断是否继续进行
        if(left > right || findValue < arrays[0] || findValue > arrays[arrays.length-1]){
            return -1;
        }

        //自适应查找mid
        int mid = left + (right - left) * (findValue - arrays[left]) / (arrays[right] - arrays[left]);
        int midValue = arrays[mid];

        //查找值大于标志值则向右递归查询
        if(findValue > midValue){
            return insertValueSearch(arrays, mid + 1, right, findValue);
        }
        else if(findValue < midValue){
            return insertValueSearch(arrays, left, mid - 1, findValue);
        }
        else{
            return mid;
        }
    }
}

Publicado 29 artículos originales · elogiado 11 · visitas 4520

Supongo que te gusta

Origin blog.csdn.net/qq_26020387/article/details/105575027
Recomendado
Clasificación