Búsqueda secuencial y búsqueda binaria (media búsqueda)

1. Búsqueda secuencial

1.Ideas

Compare los números a encontrar con los elementos de la matriz uno por uno en orden, si son iguales se encuentran, de lo contrario no se encuentran.

2. Implementación del código en lenguaje C

#include<stdio.h>
int main()
{
    
    
	int a[10] = {
    
     1,5,6,4,9,2,3,8,7,10 },i,k,find;
		printf("请输入需要查找的数k:");
	scanf("%d", &k);
	find = 0;//用find的值来判断该数有没有找到
	for (i = 0; i < 10; i++)
	{
    
    
		if (a[i] == k)
		{
    
    
			printf("找到了:%d,是a[%d],第%d个数", k, i, i + 1);
			find = 1;
		}
	}
	if (find == 0)
		printf("没找到");
	return 0;
}
  • resultado de la operación:
    Insertar descripción de la imagen aquí

2. Búsqueda binaria (media búsqueda)

1.Ideas

Dada una matriz ordenada , compare el número que desea encontrar con el elemento del medio de la matriz. Si el número es mayor (menor que) el elemento del medio, entonces el número está a la derecha (izquierda) del elemento del medio, entonces solo necesita comparar el número con el de la derecha. Compare el número en el medio (a la izquierda) y cree un bucle hasta que el número a encontrar sea igual al número en el medio, es decir, el número se ha encontrado, de lo contrario no ha sido encontrado.

2. Implementación del código en lenguaje C:

#include<stdio.h>
int main()
{
    
    
	int m, l, r,find,k;
	int a[10] = {
    
     1,2,3,4,5,6,7,8,9,10 };
	printf("请输入需要找的数k:");  
		scanf("%d",&k);
		l = 0; r =10- 1; find = 0;//l和r分别为最左边数下标和最右边数下标 用find的值来判断该数有没有找到
		do
		{
    
    
			m = (l+r)/2;//中间值下标
			if (k == a[m])
			{
    
    
				printf("找到了:%d,是a[%d],第%d个数", k,m,m+1);
				find = 1;
				break;
			}
		 else if (k > a[m])
			 l = m + 1;//范围缩小至最中间值的右边
		 else if (k < a[m])
			 r = m - 1;//范围缩小至最中间值的左边
		} while (l <= r);
		if(find==0)
		printf("没找到");
	return 0;
}
  • resultado de la operación:
    Insertar descripción de la imagen aquí

  • Se necesita más tiempo para pensar en las condiciones para salir del bucle: cuando el rango continúa reduciéndose, el subíndice más a la izquierda y el subíndice más a la derecha pueden cruzarse, es decir, el subíndice más a la izquierda es mayor que el subíndice más a la derecha. tiene Si no hay más números para buscar, puede salir del bucle.

3. Implementación del código de función del lenguaje C:

#include<stdio.h>
int main()
{
    
    
	int arr[] = {
    
     1,2,3,4,5,6,7,8,9,10 }, k=0;
	printf("请输入需要找的数k:");
	scanf("%d", &k);
	int sz = sizeof(arr) / sizeof(arr[0]);//数组元素个数
	int binary_search(int b[], int k, int sz);//函数声明
	int ret = binary_search(arr,k,sz);//调用函数并接收函数返回值
	if (ret == -1)
		printf("没找到");
	else
		 printf("找到了:%d,是a[%d],第%d个数",k,ret, ret+1);
	return 0;
}
int binary_search(int b[], int k, int sz)//函数定义
{
    
    
	int l = 0;
	int r = sz - 1;
	while (l <= r)
	{
    
    
		int m = (l + r) / 2;
		if (b[m] < k)
			l = m + 1;
		else if (b[m] > k)
			r = m - 1;
		else
			return m;//找到了返回m
	}
	return -1;//没找到返回-1
}
  • resultado de la operación:
    Insertar descripción de la imagen aquí
  • El efecto del uso de funciones se puede reflejar cuando el código es largo, lo que lo hace más conciso y más fácil de leer. Cabe señalar que si la función está después de la función principal, la función debe declararse primero al llamar a la función.

Además de dos algoritmos básicos, a saber, búsqueda secuencial y búsqueda binaria (búsqueda a la mitad), los algoritmos de búsqueda también incluyen búsqueda por interpolación, búsqueda de Fibonacci, búsqueda en tabla de árbol, búsqueda de bloques, búsqueda de hash, etc.

Supongo que te gusta

Origin blog.csdn.net/m0_74102736/article/details/130179859
Recomendado
Clasificación