Encuentre en la mitad el número de comparaciones

[Descripción del problema]
La idea básica de la búsqueda binaria es:
(1) En la lista ordenada, el registro intermedio se toma como el objeto de comparación, si el valor dado es igual al código clave del registro intermedio, la búsqueda es exitosa;
(2) Si el valor dado Si es más pequeño que el código clave del registro medio, continúe buscando en la mitad izquierda del registro medio;
(3) Si el valor dado es mayor que el código clave del registro medio, continúe buscando en la mitad derecha del registro medio;
(4) Repita el proceso anterior continuamente Hasta que encuentre el éxito o el fracaso.
Se sabe que los datos en una tabla de secuencia son enteros y están ordenados. Dado un valor que se encuentra, diseñe un algoritmo para calcular cuántas comparaciones clave se han hecho al encontrar el valor a la mitad.
[Formulario de entrada] La primera línea es un número entero n. Representa el número de elementos en la tabla de secuencia; la segunda línea es n enteros separados por espacios; la tercera línea es el valor que se encuentra.
[Formulario de salida] En esta tabla de secuencia, use la mitad de búsqueda para encontrar el número de comparaciones con el valor de búsqueda.
[Entrada de muestra]
11
1 3 5 7 9 11 13 17 21 28 32
28
[Salida de muestra]
3

Análisis:

1. La premisa de la búsqueda de medio hallazgo es que la lista es una lista ordenada. La pregunta se ha explicado como una lista ordenada. Si no se especifica, se debe ordenar primero.
2. Cree una función para la búsqueda de medio. El contador de comparación se incrementa en uno cada vez
. 3. El valor del contador de salida

Suplemento:
Buscar a la mitad : el
proceso de búsqueda de la Enciclopedia Baidu comienza desde el elemento central de la matriz En la primera mitad de la búsqueda, y comience a comparar desde el elemento del medio como antes. Si la matriz está vacía en un determinado paso, significa que no se puede encontrar. Cada comparación de este algoritmo de búsqueda reduce el rango de búsqueda a la mitad

Implementación:
cree una función que se vea a la mitad

void BinSearch(int low,int high,int data[],int key)
{//low 为有序表的起始下标 high 为末尾下标
    if(low >high)//此时查找已经结束
        return;
    int mid=(low+high)/2;
    cnt++;//定义cnt为全局变量
    if(key<data[mid])
    {
        BinSearch(low,mid-1,data,key);利用递归调用
    }
    else if(key>data[mid])
    {
        BinSearch(mid+1,high,data,key);

    }

}

Función principal

int main()
{
    int n,i,key;
    cin>>n;
    int data[n];
    for(i=1;i<=n;i++)
    {
        cin>>data[i];
    }
    cin>>key;
    BinSearch(1,n,data,key);
    cout<<cnt<<endl;
}

Debajo hay un poco de blanco. Si hay un lugar inapropiado, corrígeme.

Publicado 31 artículos originales · ganado elogios 8 · vistas 2155

Supongo que te gusta

Origin blog.csdn.net/weixin_44034024/article/details/105068338
Recomendado
Clasificación