Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ordenación
&
Búsqueda
Algoritmos y Estructura de
Datos I
https://www.toptal.com/developers/sorting-algorithms
Búsqueda Binaria
• Búsqueda del menor
menor = a[0];
for (i=1;i<n;i++)
if ( a[i]<menor )
menor=a[i];
• Búsqueda del mayor
mayor= a[n-1];
for (i=0;i<n-1;i++)
if ( a[i]>mayor )
mayor=a[i];
• Búsqueda de elemento
encontrado=-1;
for (i=0;i<n;i++)
if ( a[i]==elemento_buscado )
encontrado=i;
Búsqueda Binaria
El caso anterior de búsqueda asume que los
elementos están en cualquier orden.
Una búsqueda más eficiente puede hacerse
sobre un arreglo ordenado. Una de éstas es la
Búsqueda Binaria.
La Búsqueda Binaria, compara si el valor
buscado está en la mitad superior o inferior.
En la que esté, subdivido nuevamente, y así
sucesivamente hasta encontrar el valor.
Búsqueda Binaria Recursiva
1. Para buscar en el arreglo, elegir un índice entre desde y hasta (llamémoslo mid) y comparar
el valor en esa posición con el dato que estás buscando.
2. Si la encontraste, parar.
3. Si el valor en medio es mayor que tu dato, buscar en el rango entre desde y mid-1.
4. Si el valor en medio es menor que tu dato, buscar en el rango entre mid+1 y hasta.
INSERCIÓN
SELECCIÓN
QUICKSORT
public class BuscaBinaria {
public static void main(String[] args) {
System.out.println("Arreglo Original");
int nro[]= {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61,
67, 71, 73, 79, 83, 89, 97};
verArreglo(nro);
System.out.println("\nUbicación del dato y Numero de iteracciones");
System.out.println("\nBusqueda Binaria");
busBinaria(nro, 67);
System.out.println("\nBusqueda Secuencial");
busSecuencial(nro, 67);
sup=a.length-1;
while(inf<=sup && noEsta) {
cen=(inf+sup)/2;
if(a[cen]==dato)
noEsta=false;
else {
if(a[cen]<dato)
inf=cen+1;
else
sup=cen-1;
}
conta++;
}
if(noEsta)
System.out.println("Dato no encontrado...");
else
System.out.println("Posición: "+cen+" - Iteracciones: "+conta);
}
int nro[]= {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61,
67, 71, 73, 79, 83, 89, 97};
verArreglo(nro);
System.out.println("\nUbicación del dato y Numero de iteracciones");
public static int busBinariaRecursiva(int a[], int dato, int izq, int der){
// Si izquierda es mayor que derecha significa que no encontramos nada
if(izq > der){
return -1;
}
// Calculamos las mitades...
int iMedio = (int) Math.floor((izq + der) / 2);
int eMedio = a[iMedio];
// Ver si está en la mitad
if(eMedio == dato){
return iMedio;
}
// Si no, entonces vemos si está a la izquierda o derecha
if(dato < eMedio){
der = iMedio - 1;
return busBinariaRecursiva(a, dato, izq, der);
}else{
izq = iMedio + 1;
return busBinariaRecursiva(a, dato, izq, der);
}
}