Ricerca Binaria

di il
2 risposte

Ricerca Binaria

Ciao a tutti, ho un problema con la ricerca binaria. Creo un arrayList e lo riempio con un while e fin qui tutto bene l'arraylist viene riempito...adesso ordino l'arraylist e lo stampo... viene anche ordinato, provo a fare la ricerca e mi restituisce null per i dati che si trovano nella posizione 0 e nell'ultima posizione...come mai?? dove sbaglio?? grazie a tutti!


public String ricercaPerNome(String nome){
		int low = 0;
		int high = persone.size()-1;
		
		while(low<= high){
			int mid = (low+high)/2;
			int diff = nome.compareToIgnoreCase(persone.get(mid).getNome());
			if(diff ==0)
				return persone.get(mid).getNome();
			else
				if(diff <0)
					low = mid+1;
				else
					high = mid-1;
		}
		return null;	
	}
	

2 Risposte

  • Re: Ricerca Binaria

    Adesso ho riprovato ed ho capito che confronta solo il primo elemento che si va a visitare...quindi se è uguale lo restituisce, altrimenti no.
  • Re: Ricerca Binaria

    Ho risolto in questo modo:
    
    public String ricercaPerNome(String nome){
    		int low = 0;
    		int high = persone.size()-1;
    		
    		while(low<= high){
    			int mid = (low+high)/2;
    			
    			if(persone.get(mid).getNome().compareToIgnoreCase(nome) ==0){
    				return persone.get(mid).getNome();
    			}
    			else{
    				if(persone.get(mid).getNome().compareToIgnoreCase(nome) <0){
    					low = mid+1;
    				}
    				else{
    					high = mid-1;
    				}
    		}
    		}
    		return null;	
    	}
    	
    il problema era il compareto... grazie lo stesso a tutti!
Devi accedere o registrarti per scrivere nel forum
2 risposte