La realización del método de búsqueda binaria en lenguaje C

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};
Primera ronda de búsqueda
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;
Segunda ronda de búsqueda
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:

Inserte la descripción de la imagen aquí
¡Espero poder ayudarte!

Supongo que te gusta

Origin blog.csdn.net/Gunanhuai/article/details/88934984
Recomendado
Clasificación