2017-08-27 108 views
2

這是一個好的執行二進制搜索算法?它的工作原理,但是我想到了一個實現,與我的教師不同。任何人都可以爲我打洞嗎?Java:二進制搜索

package algorithm.linearsearch; 

公共類二分查找{

public static void main(String[] args) { 
    System.out.println(binarySearch(
      new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 26, 109, 1001, 1100 }, 
      26)); 

} 

private static int binarySearch(int[] array, int target) { 
    int p = 0; 
    int r = array.length - 1; 
    int q; 

    while (p <= r) { 
     q = (p + r)/2; 
     if (array[q] == target) { 
      System.out.println("value: " + array[q]); 
      return q; 
     } 
     if (array[q] > target) { 
      r = q + 1; 
     } else { 
      p = q - 1; 
     } 

    } 

    return -1; 

} 

}

+0

你的教師執行什麼? – Ravi

+1

您也可以嘗試使用遞歸算法進行binarySearch。 – nagendra547

+1

這聽起來像你要求* [代碼審查](https://codereview.stackexchange.com/)*。 – ray

回答

1

就在這個

if (array[q] > target) { 
    r = q + 1; 
} else { 
    p = q - 1; 
} 

應該

if (array[q] > target) { 
    r = q - 1; // index lower to current pivot 
} else { 
    p = q + 1; // index upper to current pivot 
} 
+0

@nullpointer你錯過了空指針的機會。在所有人中,你不應該把它當作你的用戶名:D –

1

我可以說的一件事。如果找到您的程序,則返回索引,否則返回-1。因此,您不需要輸出值作爲從用戶那裏獲取有關查找哪個元素的輸入。

如果您的數組爲空,您最初需要檢查返回-1以避免在計算數組長度時發生空指針異常。