Búsqueda binaria / búsqueda binaria ------ idea de algoritmo

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  如找232次个数,只需要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;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_43885306/article/details/112982021
Recomendado
Clasificación