Directorio de artículos
En este tutorial, aprenderá cómo funciona la clasificación de búsqueda binaria. Además, encontrará ejemplos en lenguaje C.
La búsqueda binaria es un algoritmo de búsqueda que se utiliza para encontrar la posición de un elemento en una matriz ordenada.
En este método, busque siempre un elemento en medio de la matriz parcial.
La búsqueda binaria solo se puede implementar en una lista ordenada. Si los elementos aún no están ordenados, primero debemos ordenarlos.
¿Cómo funciona la búsqueda binaria?
El algoritmo de búsqueda binaria se puede implementar de las dos formas siguientes.
- Método iterativo
- Recursividad
El método recursivo sigue el método de divide y vencerás.
Los pasos de estos dos métodos se analizan a continuación.
- La matriz a buscar es:
suponga que x = 4 es el elemento a buscar. - Establezca dos punteros bajo y alto en las posiciones más baja y más alta, respectivamente.
- Encuentre el elemento del medio en la mitad de la matriz, por ejemplo, arr [(bajo + alto) / 2] = 6.
- Si x == mid, devuelve mid; de lo contrario, compare el elemento buscado con mid.
- Si x> mid, compare x con el elemento medio del elemento a la derecha de mid. Esto se puede hacer estableciendo bajo a bajo = medio + 1.
- De lo contrario, compare x con el elemento del medio a la izquierda del medio. Esto se puede hacer estableciendo alto a alto = medio-1.
- Repita los pasos 3 a 6 hasta que lo bajo se encuentre con lo alto.
- Encuentre x = 4.
Pseudocódigo de búsqueda binaria
Método iterativo
do until the pointers low and high meet each other.
mid = (low + high)/2
if (x == arr[mid])
return mid
else if (x > arr[mid]) // x is on the right side
low = mid + 1
else // x is on the left side
high = mid - 1
Recursividad
binarySearch(arr, x, low, high)
if low > high
return False
else
mid = (low + high) / 2
if x == arr[mid]
return mid
else if x < arr[mid] // x is on the right side
return binarySearch(arr, x, mid + 1, high)
else // x is on the right side
return binarySearch(arr, x, low, mid - 1)
C ejemplo
Método iterativo
// Binary Search in C
#include <stdio.h>
int binarySearch(int array[], int x, int low, int high) {
// Repeat until the pointers low and high meet each other
while (low <= high) {
int mid = low + (high - low) / 2;
if (array[mid] == x)
return mid;
if (array[mid] < x)
low = mid + 1;
else
high = mid - 1;
}
return -1;
}
int main(void) {
int array[] = {
3, 4, 5, 6, 7, 8, 9};
int n = sizeof(array) / sizeof(array[0]);
int x = 4;
int result = binarySearch(array, x, 0, n - 1);
if (result == -1)
printf("Not found");
else
printf("Element is found at index %d", result);
return 0;
}
Recursividad
// Binary Search in C
#include <stdio.h>
int binarySearch(int array[], int x, int low, int high) {
if (high >= low) {
int mid = low + (high - low) / 2;
// If found at mid, then return it
if (array[mid] == x)
return mid;
// Search the left half
if (array[mid] > x)
return binarySearch(array, x, low, mid - 1);
// Search the right half
return binarySearch(array, x, mid + 1, high);
}
return -1;
}
int main(void) {
int array[] = {
3, 4, 5, 6, 7, 8, 9};
int n = sizeof(array) / sizeof(array[0]);
int x = 4;
int result = binarySearch(array, x, 0, n - 1);
if (result == -1)
printf("Not found");
else
printf("Element is found at index %d", result);
}
Complejidad de búsqueda binaria
complejidad del tiempo
- Mejor complejidad de caso: O (1)
- Complejidad de caso promedio: O (log n)
- Peor complejidad del caso: O (log n)
Complejidad espacial La complejidad espacial de la
búsqueda binaria es O (n).
Aplicación de búsqueda binaria
- Utilizado en la biblioteca STL de Java, .Net, C ++
- Durante la depuración, la búsqueda binaria se utiliza para determinar dónde ocurrió el error.
Documentos de referencia
[1] Parewa Labs Pvt. Ltd. Binary Search [EB / OL] .https: //www.programiz.com/dsa/binary-search,2020-01-01.