2017-09-30 3 views
0

J'essaie de trouver un élément dans un tableau en utilisant la recherche-récursivité binaire. Je suis incapable de comprendre ce qui ne va pas avec la logique du programme car j'obtiens une sortie incorrecte. Dire si je cherche 5, la sortie que je reçois est 4. De même, je ne reçois pas les résultats corrects pour d'autres cas aussi bien. Quel pourrait être le problème avec ce programme?Java: Recursion Recherche binaire pour trouver l'élément d'un tableau-Erreur logique

public class OrdArray { 
    private long[] a; 
    private int nELems; 


    public OrdArray(int max){ 


    a=new long[max]; 
     int nElems=0; 
    } 

    public int size(){ 
     return nELems; 
    } 

    public void insert(int value){ 
     int j; 
     for(j=0;j<nELems;j++){ 
      if(a[j]>value){ 
       break; 
      } 
     } 
     for(int k=nELems;k>j;k--){ 
      a[k]=a[k-1]; 
     } 
     a[j]=value; 
     nELems++; 
    } 

    public void display(){ 
     for(int i=0;i<nELems;i++) 
     System.out.print(a[i]+" "); 
     System.out.println(" "); 
    } 

    public int Recursionfind(int low,int high,int key){ 

     if(low>=high){ 
      return nELems; 
     } 

     int mid=(low+high)/2; 

     if(a[mid]== key){ 
      return mid; 
     } 

     if(a[mid]>key){ 
      return Recursionfind(low,mid-1,key); 
     } 

     else{ 
      return Recursionfind(mid+1,high,key); 
     } 

    } 
} 


class OrderedApp{ 
    public static void main(String[] args) { 
     int maxsize=100; 
     OrdArray arr; 
     arr=new OrdArray(maxsize); 
     System.out.println("Insert array:"); 
     arr.insert(3); 
     arr.insert(5); 
     arr.insert(1); 
     arr.insert(7); 
     arr.insert(6); 
     arr.insert(4); 
     arr.insert(8); 
     arr.insert(2); 
     arr.insert(9); 
     arr.display(); 
     int n=arr.size(); 
     System.out.println(n); 
     int key=5; 

     System.out.println("Key is :" + arr.Recursionfind(0,n-1,key)); 
    } 
} 

Répondre

0

L'erreur se trouve ici:

if(a[mid]== key){ 
    return mid; 
} 

Vous correspondre à la valeur recherchée à la valeur de votre choix à l'endroit mid. Si vous le trouvez, vous devez retourner la valeur trouvé pas la clé.

if(a[mid]== key){ 
    return a[mid]; 
} 

Vous avez aussi changer a de long[] à int[].

+0

Oui cela a fonctionné. Je vous remercie. –