什麼是二分法(折半法)查找&&java代碼實現?

前提是數組已經排好序,(查18的下標)
數值 11 12 13 14 15 16 17 18 19 20
下標 0 1 2 3 4 5 6 7 8 9
 第一步,首先取得數組 0~9 的中間元素中間元素的位置爲:(開始下標 0 + 結束下標 9)/2=下標 4通過下標 4 取得對應的值 15
18 大於 15,那麼我們在後半部分查找
 第二步,取數組 4~9 的中間元素
4~9 的中間元素=(下標 4 + 1 +下標 9)/2=下標 7
下標 7 的值爲 18,查找完畢,將下標 7 返回即可

對於有重複元素的有序數組,二分查找需要注意以下要點:
if (val <= A[m]) h = m;
因爲 h 的賦值爲 m 而不是 m - 1,因此 while 循環的條件也就爲 l < h。(如果是 m - 1 循環條件
爲 l <= h)

  1. public int getPos(int[] A, int n, int val) {
  2. int l = 0, h = n - 1;
  3. while (l < h) {
  4.   int m = l + (h - l) / 2;
    
  5.   if (val <= A[m]) h = m;
    
  6.   else l = m + 1;
    
  7. }
  8. return A[h] == val ? h : -1;
  9. }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章