El método de búsqueda binaria también se llama búsqueda binaria. Como su nombre lo indica, divide los datos en dos mitades, luego juzga qué mitad de la clave está buscando y repite los pasos anteriores para encontrar la clave de destino;
Nota: (tos, tos, golpe en la pizarra) El método de búsqueda binaria solamente Adecuado para operaciones en matrices y datos en una secuencia existente. ! !
Obviamente, el método de búsqueda binaria es mucho más eficiente que otros métodos de búsqueda como la búsqueda secuencial;
realicemos una operación práctica y entendamos el significado de la búsqueda binaria.
Por ejemplo: para encontrar la posición de key = 7 en el arreglo arr [] = {8,7,9,6,4,1,2,5,3,10,11}; primero, primero debemos poner el arreglo arr en Los miembros de datos están ordenados. arr [] = {1,2,3,4,5,6,7,8,9,10,11};
Como se muestra en la figura: el extremo pequeño de este grupo de datos está marcado como bajo, el extremo grande está marcado como alto y el El valor se indica como medio; en la
búsqueda binaria, compare la clave buscada con el medio, por ejemplo, clave = 7, puede reducir el rango de búsqueda entre medio y alto;
como se muestra en la figura, puede encontrar clave = bajo = 7;
nota : (Golpee la pizarra) Si el número del medio no es un número entero, debe redondearse.
el código se muestra a continuación:
#include<stdio.h>
int BinSearch(int arr[],int len,int key) //折半查找法(二分法)
{
int low=0; //定义初始最小
int high=len-1; //定义初始最大
int mid; //定义中间值
while(low<=high)
{
mid=(low+high)/2; //找中间值
if(key==arr[mid]) //判断min与key是否相等
return mid;
else if(key>arr[mid]) //如果key>mid 则新区间为[mid+1,high]
low=mid+1;
else //如果key<mid 则新区间为[low,mid-1]
high=mid-1;
}
return -1; //如果数组中无目标值key,则返回 -1 ;
}
int main()
{
int arr[]={
1,2,3,4,5,6,7,8,9,10,11}; //首先要对数组arr进行排序
printf("%d \n",BinSearch(arr,(sizeof(arr)/sizeof(arr[0])),7));
return 0;
}
Los resultados son los siguientes:
¡Espero poder ayudarte!