Directorio de artículos
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:
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:
-
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:
- 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.