Búsqueda binaria / búsqueda binaria (este método solo se usa para arreglos secuenciales)
El algoritmo es una forma eficiente de encontrar números.
假设n个数 次数=log2n 如找2的32次个数,只需要32次
Pasos:
1. Establecer izquierda = la base del dígito inicial (0), derecha = la base del último dígito, medio = (izquierda + derecha) / 2
2. Doblar constantemente por la mitad para comparar con el número que desea encontrar (k)
3. Si a [mid]> k, entonces mid está obviamente a la izquierda de k, left = mid + 1; si a [mid] <k, entonces mid está obviamente a la derecha de k, right = mid-1;
repita 1, 2, 3 pasos, cuando a [mid] = k, encuentre el número k, es decir, genere el número base de mid
Por ejemplo, a [10] = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10} Encuentre un número en la matriz y genere su base. Si encuentra el número 7, el resultado muestra la base 6
izquierda = 0 , derecha = 9, medio = (izquierda + derecha) / 2 = 4, en este momento a [medio] = 5 <7, izquierda = medio + 1 = 5
izquierda = 5, derecha = 9, medio = (izquierda + derecha) / 2 = 7, en este momento a [mid] = 8> 7, right = mid-1 = 7
left = 5, right = 7, mid = (left + right) / 2 = 6, en este momento a [mid] = 7 = 7, si el medio de salida
se encuentra utilizando el método de búsqueda normal, se necesitarán 7 veces para encontrarlo desde la primera posición, lo que reduce en gran medida la eficiencia
#define _CRT_SECURE_NO_WARNINGS 1
int main(){
int a[10] = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
printf("请输入你想要的数字:");
int k;
scanf("%d",&k);//输入你想要的数字
int left = 0;
int right = 9;
while (left <= right){
//比较左右大小来得到想要数字的底数
int mid = (left + right) / 2;
if (a[mid] < k){
left = mid + 1;
}
else if (a[mid]>k){
right = mid - 1;
}
else{
printf("它的底数是:%d\n", mid);
break;
}
}
if (left > right){
printf("找不到奥!\n");
}
return 0;
}