【问题标题】:Binary search in javajava中的二分查找
【发布时间】:2012-10-05 02:22:19
【问题描述】:

我正在尝试在 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.");
        }
    }

【问题讨论】:

  • 你能提供你传递给方法的值吗?
  • 代码显示正确。确保arreglo 按升序排序。如果不是,那将解释您看到的行为。

标签: java arrays search binary


【解决方案1】:

您可以使用库中已有的Arrays#binarySearchCollections#binarySearch

【讨论】:

  • @PaulDinh 也许OP可以澄清一下。
  • 这个答案超出范围,目标是锻炼,学习基本算法,而不是实现程序。
【解决方案2】:

这是我的贡献:

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" ));
   }

}

【讨论】:

    【解决方案3】:

    二分查找仅适用于已排序的数字。请确保数组 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; 
         }      
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多