Método de búsqueda binaria (método de búsqueda binaria)

Búsqueda binaria

1. La ventaja es que el número de comparaciones es relativamente pequeño, y el número que desea encontrar se puede encontrar rápidamente, lo que lleva menos tiempo.
2. La desventaja es que este método requiere que se ordene la tabla a buscar, y es difícil insertarla y eliminarla.

1. Use una matriz unidimensional como ejemplo:

Por ejemplo, una matriz unidimensional a [10] = {2,5,7,8,9,15,20); encuentre la posición de la clave = 15 en esta matriz. (Debido a que es un ejemplo, esta matriz está ordenada. Si encuentra una matriz desordenada, puede ordenarla primero, pero de hecho, el tipo de kung fu, se estima que se puede encontrar después de atravesarla. Por lo tanto, no se recomienda que esté en el orden. Será más lento cuando lo use), Inserte la descripción de la imagen aquí
como se muestra en la figura, registre los datos más pequeños como bajos, los datos más grandes como altos y el valor medio como medio; (si mid no es un entero, debe redondearse)
use dos puntos Cuando busque por método, primero compare el valor de la clave a buscar con mid. Por ejemplo, en este ejemplo, se comparan 8 y 15, 8 es menor que 15, por lo que el rango se reduce a [8, 20]. Dentro del intervalo. Luego continúe usando el método anterior en este intervalo; el
código del lenguaje c es el siguiente:

#include<stdio.h>
int search(int a[],int n,int key)
{
   int low=0;
   int high=n-1,mid;
   while(low<=high)
   {
      mid=(low+high)/2;
      if(key==a[mid]);
      	return mid;
      if(key>a[mid])
      		low=mid+1;
      	else high=mid-1;
   }
return -1;
}

int main()
{
   int a[]={2,5,7,8,9,15,20};
   printf("%d",search(a,7,15));
   return 0;
}

2. Use una matriz bidimensional para buscar por la mitad.

Dado que se utiliza una matriz de dos dígitos para la búsqueda, significa que cada fila y columna de la matriz bidimensional está ordenada.
Ejemplo: hay una matriz de dos dígitos de 3 * 5. Cada fila y cada columna de la misma se incrementan, como se muestra en la figura. Inserte la descripción de la imagen aquí
Debido a que cada fila se incrementa, inicialmente usamos el número 9 en la esquina superior derecha como punto de referencia, necesitaremos encontrar Compara el número con el número 9, si es mayor que 9, entonces la columna del número 9 no cambia, y el número de filas aumenta en uno, lo que equivale a saltar al número 12. Luego compare el número que se encuentra con el número 12, si es menor que 12 , Luego, el número de filas del número 12 permanece sin cambios, el número de columnas -1. Luego repita el proceso anterior, puede encontrar.

Nota: Las condiciones para el final del ciclo: 1 es encontrar el número que desea y finalizar. 2 no se encuentra, finalizado, hay dos posibilidades cuando no se encuentra el número, se ha aumentado el número de filas, se ha excedido el límite de la matriz o se ha reducido el número de columnas, se ha excedido el límite.
El código completo es el siguiente:

#include<stdio.h>
int main()
{
  int n,m,key,i,j;
  int a[10][10];
  scanf("%d %d",&n,&m);
  for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
      scanf("%d",&a[i][j]);
  scanf("%d",&key);
  i=1;j=m;   //将与key作比较的点选为右上角
  while(i<=n&&j>=1)
  {
    if(a[i][j]==key)
    {
      printf("%d %d",i,j);
      return 0;
    }
    if(a[i][j]<key)
        i++;
    else  j--;
  }
  printf("-1");    //找不到则输出-1
  return 0;
  }
10 artículos originales publicados · Me gusta2 · Visitas 217

Supongo que te gusta

Origin blog.csdn.net/dfwef24t5/article/details/104140669
Recomendado
Clasificación