¿Cuál es el código de búsqueda binaria usando recursividad?

/ ** Toma la entrada de una matriz llena hasta n.

* Ordenar la matriz en orden ascendente

* Buscar una entrada dada en la matriz

* Todos usando recursividad

* /

import java.util. *;

clase pública Binary_Search

{

Scanner sc = nuevo escáner (System.in);

int arr [] = nuevo int [50]; int limit, search, temp, a, b, c, d;

Búsqueda binaria()

{

límite = 0;

búsqueda = 0;

temp = 0;

a = 0; // almacena el primer índice

b = 0; // almacena el último índice

c = 0; //medio

}

nulo readData ()

{

System.out.println (“Ingrese el límite”);

limit = sc.nextInt ();

System.out.println (“Rellenar la matriz”);

para (int i = 0; i <límite; i ++)

{

arr [i] = sc.nextInt ();

}

System.out.println (“Ingrese el valor a buscar”);

búsqueda = sc.nextInt ();

a = 0;

b = límite-1;

}

Ordenación nula (int n)

{

si (n <límite)

{

para (int j = 1; j <limit-n; j ++)

{

if (arr [j-1]> arr [j])

{

temp = arr [j-1];

arr [j-1] = arr [j];

arr [j] = temp;

}

}

Ordenar (n + 1);

}

}

void display_sorted ()

{

System.out.print (“La matriz ordenada (orden ascendente):”);

para (int i = 0; i <límite; i ++)

{

System.out.print (arr [i] + “”);

}

System.out.println ();

}

int binary_search (int n, int s)

{

c = (a + b) / 2; // alteración del índice medio en cada llamada recursiva

if (n <= b) // al principio n = 0 que se incrementa en 1 en cada llamada recursiva

{

if (arr [c] <s)

a = c + 1;

más si (arr [c] == s)

{

d = arr [c];

binary_search (b + 1, s); // el último valor actualizado de b aumentó en 1 para satisfacer el caso base

}

más si (arr [c]> s)

b = c-1;

binary_search (n + 1, s);

} // a, b, c actualizado regularmente según las condiciones internas si está satisfecho

retorno d;

}

void display_search ()

{

if (binary_search (0, búsqueda) == búsqueda)

System.out.println (“Búsqueda encontrada:” + binary_search (0, search) + “en el índice:” + c); // c tiene el índice del valor buscado en arr []

más

System.out.println (“Búsqueda no encontrada”);

}

public static void main ()

{

Binary_Search obj = new Binary_Search ();

obj.readData ();

obj.Sort (0);

obj.display_sorted ();

obj.display_search ();

}

}

Para el código puedes elegir un idioma. Te diré la idea en un entorno formal que debería ser útil.

Supongamos que tiene una matriz ordenada creciente y hagámosla global para que esté disponible en cualquier ámbito.

La función recursiva que defina tomará el límite izquierdo y derecho de la matriz, así como el valor para buscar como argumentos, lo que significa la parte “reducida” de la matriz para buscar.

find_element (izquierda, derecha, val):
If array [(izquierda + derecha) / 2] == val
luego
retorno (izquierda + derecha) / 2
de lo contrario si array [(izquierda + derecha) / 2]
luego
return find_element ((izquierda + derecha) / 2, derecha, val)
más
return find_element (izquierda, (izquierda + derecha) / 2, val)

Tome nota de que no he incluido ningún caso límite, lo dejaré para que piense en ellos.

More Interesting

¿Por qué no hay soluciones a pedido de Hadoop para múltiples inquilinos?

¿Cuál es el algoritmo de aprendizaje de Quora para su suministro de noticias?

¿Puede mostrar que la ordenación por fusión tiene complejidad de tiempo [matemática] O (n \ log n) [/ matemática]?

¿Cuál es un buen enfoque de aprendizaje automático para recomendar noticias basadas en el historial de lectura de un usuario?

¿Cuáles son algunas buenas ideas sobre proyectos en algoritmos y / o estructuras de datos?

¿Cómo podemos demostrar que cada matriz 1D tiene un pico o que cualquier matriz 1D siempre tiene un pico?

¿Cuáles son algunas de las estructuras de datos / algoritmos de clasificación más interesantes?

¿Las siguientes declaraciones de bucle en C / C ++ tienen el mismo tiempo de ejecución?

¿Cuál es la diferencia entre recursividad e iteración?

Cómo encontrar la notación Big O del siguiente programa

¿Cuáles son algunos ejemplos de colas de prioridad en Java?

Cómo llegar a la lógica para construir un método de impresión inversa que imprima los nodos en una lista vinculada usando un enfoque recursivo usando Java

¿Cuáles son las mejores estructuras de datos para un índice espacial utilizado para averiguar en qué región de un espacio delimitado cae un nuevo punto dado?

¿Cuál es la mejor estructura y algoritmo de datos para encontrar un valor máximo dentro de un subconjunto de una población de datos que satisfaga alguna condición de rango?

Cómo aprender a escribir buenos algoritmos