2014-09-13 86 views
0

我感覺非常非常愚蠢,因爲我解決了比這更難的東西。 這應該是有序二分搜索的實現。每當我跟蹤12,彈出一個stackoverflow錯誤。請幫忙嗎?執行二進制搜索的問題

public class binarySearch {   
    public static void main(String[] args) { 
     int[] arr = { 1, 5, 6, 8, 12, 88 }; 
     System.out.println(binaryHelper(0, arr.length - 1, 12, arr)); 
    } 

    public static int binaryHelper(int first, int last, int target, int[] arr) { 
     if(first > last) return -1; 
     else { 
      int mid = first + last/2; 
      if(arr[mid] == target) return mid; 
      else if(arr[mid] > target) return binaryHelper(first, mid - 1, target, arr); 
      else return binaryHelper(mid + 1, last, target, arr); 
     } 
    } 
} 
+0

[Java BinarySearch]的可能重複(http://stackoverflow.com/questions/12517764/java-binarysearch) – Joe 2014-09-13 11:24:35

+0

您認爲'first + last/2;'是如何評估的? – 2014-09-13 11:30:32

回答

2

這是由於您的operators在你mid變量計算的優先順序。它應該被計算爲:

int mid = (first + last)/2; 

,而不是

int mid = first+last/2; 
+0

非常感謝你!哈哈,我現在感到很開心。 – Lifter 2014-09-13 11:35:12

1

錯誤是在這裏:

int mid = first+last/2; 

這意味着中期等於第一+最後由2 dividied這是錯誤的

所以它應該像

int mid = (first+last)/2; 
+0

感謝您的幫助。 – Lifter 2014-09-13 11:35:44

+0

如果幫助你,就接受答案;) – kirti 2014-09-13 11:37:35