Consulta sobre búsqueda en array

Hola dimondi como estas espero que muy bien, disculpa mi nuevo atrevimiento pero quisiera saber si cuando tengas un tiempo puedes ver mi clase. Resulta que he realizado un método con búsqueda binaria y hay algunos valores que no me los encuentra y otros si. Adjunto mi clase y lo que me sale en pantalla para explicarme mejor, espero que cuando tengas tiempo le eches una vista:
package javaapplication179;
import java.util.*;
public class Binaria {
    int vector[] = new int [10];
    int vectorBis[] = new int [11] ;
    Random aleatorio = new Random();
    Scanner entrada = new Scanner(System.in);
    public void llenarArray()
    {
        int nro;
        for(int i = 0 ; i < vector.length ; i = i + 1)
        {
            nro = 0 + aleatorio.nextInt(50); //establece rango de nros aleatorios
            vector = nro; //se almacenan los nros aleatorios el vector
        }
    }
        public void imprimirVector()
        {
            System.out.println();
            for(int i = 0; i < vector.length; i = i + 1)
            System.out.println(vector); //se imprimen los elementos del vector
        }
        public void ordenarVector()
        {
            int aux = 0;
        for(int i = 0; i < vector.length - 1; i = i + 1)
            for(int j = 0; j < vector.length - 1; j = j + 1)
        {
            if (vector[j] > vector[j + 1])
            {
                // intercambiar
                aux = vector[j];
                vector[j] = vector[j + 1];
                vector[j + 1] = aux;
            }
        }
            imprimirVector();
            System.out.println();
        }
        public void dato()
        {
            System.out.println();
            System.out.println("1.  Busqueda");
            System.out.println("2.  Salir");
            System.out.println("Opción elegida: ");
            int r = entrada.nextInt();
            while(r == 1)
            {
            System.out.println("Elemento buscado: ");
            int d = entrada.nextInt();
            busquedaBinaria(d);
            System.out.println("1.  Busqueda");
            System.out.println("2.  Salir");
            System.out.println("Opción elegida: ");
            r = entrada.nextInt();
            }
        }
        public void busquedaBinaria(int x)
        {
          int bajo = 0;
          int alto = vector.length;
          int central = (int) ((bajo + alto) / 2);
          boolean no_se_encontro = false;
          while ((bajo < alto) && (vector[central] != x))
          {
            if (x < vector[central]) 
            alto = central - 1;
             else 
            bajo = central + 1;
            central = (int) ((bajo + alto) / 2);
            if (central ==alto)
            {
            no_se_encontro = true;
            break;
            }
        }
          if (no_se_encontro == true) 
           System.out.println("Valor no encontrado");
          else
            System.out.println("Valor encontrado en " + central);
           } // fin del método de la búsqueda
        }
 el main:
package javaapplication179;
public class Main {
    public static void main(String[] args) {
        Binaria r = new Binaria();
        r.llenarArray();
        r.imprimirVector();
        r.ordenarVector();
       ...
Respuesta
1
Aparentemente todo esta bien, el método de búsqueda binaria, es un poco especial, no eres la primera persona que dice que no le funciona el algoritmo, yo personalmente creo que esto
?? central = (int) ((bajo + alto) / 2);
            if (central ==alto)
            {
            no_se_encontro = true;
            break;
            }
        }
deberia ir aqui
            if (central ==alto)
            {
            no_se_encontro = true;
            break;
            }
        central = (int) ((bajo + alto) / 2);
Ya que primero sacas el nuevo central y luego comparas, creo que primero deberías comparar con el nuevo "alto" y luego recién sacar el nuevo central si es que la comparación no es valida para la siguiente vuelta del while.
Pruébate eso y dime a ver que tal funciona.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas