2

Java で二分探索を実装しようとしていますが、機能しません...理由はわかりません。番号が見つからないというエラーが常に表示されます...

理由はわかりません。エラーは表示されません:S 助けてくれてありがとう...

public void busquedaBinaria(int[] arreglo, int buscar) {        

        int centro = 0; //middle
        int inferior = 0;
        int superior = arreglo.length - 1;
        boolean encontrado = false; //found flag

        while(inferior <= superior)
        {
            centro = (superior + inferior) / 2;            

              if (arreglo[centro] == buscar){
                  System.out.println("-Number " + buscar + " found in the " + centro + " position.");
                  encontrado=true;
                  break;
              }
              else if (arreglo[centro] > buscar) {
                  superior = centro - 1;
              }
              else{
                  inferior = centro + 1;
              }     
              System.out.println(centro);
        }

        if (encontrado == false) {
            System.out.println("-Number " + buscar + " hasn't been found.");
        }
    }
4

3 に答える 3

4

ライブラリで既に利用可能な Arrays#binarySearchまたはを使用できます。Collections#binarySearch

于 2012-10-15T06:02:08.627 に答える
1

ここに私の貢献があります:

public class BinarySearch
{
   private static String search( String[] entries, String entry, int left, int right )
   {
      int index = ( left + right ) / 2;
      if( left > right || index >= entries.length )
      {
         return null;
      }
      int cmp   = entries[index].compareTo( entry );
      if( cmp == 0 )
      {
         return entry;
      }
      if( cmp > 0 )
      {
         return search( entries, entry, left, index - 1 );
      }
      return search( entries, entry, index + 1, right );
   }// String search( String[] entries, String entry, int left, int right )



   public static String search( String[] entries, String entry )
   {
      return search( entries, entry, 0, entries.length );
   }// String search( String[] entries, String entry )



   public static void main( String[] args )
   {
      String[] entries = new String[] { "Aubin", "Barbara", "George", "Muriel", "Sarah", "Tom" };
      for( String entry : entries )
      {
         System.out.println( search( entries, entry ));
      }
      System.out.println( search( entries, "Toto" ));
   }

}
于 2012-10-15T06:17:31.570 に答える
1

二分探索は、ソートされた数値でのみ機能します。配列arregloがソートされていることを確認してください。

配列が降順の場合、ロジックを少し変更する必要があります。

     if (arreglo[centro] == buscar){
       System.out.println("-Number " + buscar + " found in the " + centro + " position.");
       encontrado=true;   
       break; 
     } 
     else if (arreglo[centro] > buscar) { 
       superior = centro + 1;
     }
     else{ 
       inferior = centro - 1; 
     }      
于 2012-10-15T06:14:21.167 に答える