Jak to poprawić? Wyszukiwanie binarne.

0

nie wiem co w kodzi napisałem źle.
program miałby wyszukiwać binarnie podany element

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
 
 
 
 
public class Cwiczenia {
    public static void main(String[] args){
        Random rn = new Random();
        Scanner in = new Scanner(System.in);
        int element;
        int min =0; 
        int max;
        int pozycja = 0;
        int pozycjaWTablicy;
         
        ///zapełnianie i sortowanie wbudowaną metodą sort wykorzystującą sortowanie QUICK SORT
        int[] tablica = new int[100];
        for(int i=0; i<100; i++) tablica[i]=rn.nextInt(10000);
        Arrays.sort(tablica);
         
        /// Podaję element którego szukam
        System.out.println("Podaj element który szukasz");
        element=in.nextInt();
         
        /// szukam i dzielę na pół 
        max=tablica.length-1;
        do{
          
            ///zmodyfikowane 11.06.16 :D
            pozycjaWTablicy = (min+max)/2;
            else if(tablica[pozycjaWTablicy]>element)max=pozycjaWTablicy; 
            if(tablica[pozycjaWTablicy]<element)min=pozycjaWTablicy;
            else {pozycja=pozycjaWTablicy; break;} 
        }while(min<max && min!=max);
         
        System.out.println(pozycja);
         
 }
} 
1

Wstawiasz breakpoint w tej swojej pętli while i następnie uruchamiasz debuger i klikasz sobie step-over i wykonujesz program krok po kroku patrząc na watrości zmiennych.
Ale tak na oko wygląda ok.

2
            pozycjaWTablicy = (int) (Math.floor(min+max)/2);
            //powyższy wiersz można uprościć
            pozycjaWTablicy = (min+max)/2;
            if(tablica[pozycjaWTablicy]>element)max=pozycjaWTablicy; 
            else if(tablica[pozycjaWTablicy]<element)min=pozycjaWTablicy;
            else {pozycja=pozycjaWTablicy; break;} 

Użytkownik wpisuje element do wyszukania nie znając zawartości tablicy. Twój algorytm wejdzie w nieskończoną pętlę gdy szukanego elementu nie ma w tablicy.

1

Poza tym co napisał @bogdans, warto wspomnieć że przy skanerze przydała by się obsługa wyjątków, no bo co jak ktoś wstawi coś innego niż int np. string, warto sobie od razu przerabiać takie rzeczy i robić sobie dobry nawyk ;), a poza tym nigdy nie wiesz kiedy dobierze ci się jakaś małpa do komputera :P.
PS. No i jeszcze zamiast 3 importów możesz zrobić jeden ogólny, tym bardziej że wykorzystujesz tylko jeden package(nie wiem czy dobrze to nazwałem ale chyba wiadomo o co chodzi), możesz zrobić import java.util.*

1 użytkowników online, w tym zalogowanych: 0, gości: 1