2013-10-31 40 views
0
public class ArrayUtilities { 
    public static void main(String[] args) { 
     int[] array1 = { 1, 2, 3, 4, 5, 10, 15, 30, 32 }; 
     int target1 = 30; 
     System.out.println(binarySearch(array1, target1)); 
    } 

    public static boolean binarySearch(int[] array, int target) { 
     int left = 0; 
     int right = array.length - 1; 
     while (right >= left) { 
      int middle = (right - left)/2; 
      if (target == array[middle]) { 
       return true; 
      } else if (target > array[middle]) { 
       left = middle - 1; 
      } else if (target < array[middle]) { 
       right = middle + 1; 
      } 
     } 
     return false; 
    } 
} 

每當我運行代碼時,它都不會打印任何內容,也不會說錯誤。我不明白爲什麼。 請幫忙! 預先感謝您。如何在java中進行二進制搜索

+2

Arrays.binarySearch有什麼問題? (http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html) –

+0

它的功課,我不能使用任何庫方法,但無論如何謝謝你! – user2826974

+0

你錯了,它輸出至少爲'true'或'false',你可以使用調試器來查看執行過程中發生了什麼 –

回答

1

算法執行不正確;

您的代碼正在運行一個無限循環。

地點要考慮:

  1. int middle = (right - left)/2;int middle = (right + left)/2;
  2. 否則如果(目標>陣列[中間]){ 左=中間 - 1;記住,應該是left = middle+1;,你需要在數組的下一部分找到數字。

  3. 同樣考慮這裏的邏輯; else if(target < array [middle]){ right = middle + 1; }

+0

謝謝你的幫助! – user2826974

+0

@ user2826974當然沒問題。接受答案,結束這個問題。 – JNL