java 二分查詢

2021-09-11 22:21:05 字數 732 閱讀 7993

注意二分查詢的邊界條件和變種。

正常情況(複雜度為logn):

到最後跳出迴圈時,l是較大的,h是較小的,利用這一點可以得到小於key的最大值還是大於key的最小值(前提是l<=h,否則最後l等於h)。求開方時,如果求的是開方之後的整數部分,return h,因為退出迴圈時,h比l小。

public int binarysearch(int nums, int key)  else if (nums[m] > key)  else 

}return -1;

}

在乙個有重複元素的陣列中查詢 key 的最左位置:

public int binarysearch(int nums, int key)  else 

}return l;

}

該實現和正常實現有以下不同:

在 nums[m] >= key 的情況下,可以推導出最左 key 位於 [l, m] 區間中,這是乙個閉區間。h 的賦值表示式為 h = m,因為 m 位置也可能是解。

在 h 的賦值表示式為 h = mid 的情況下,如果迴圈條件為 l <= h,那麼會出現迴圈無法退出的情況。

當迴圈體退出時,不表示沒有查詢到 key,因此最後返回的結果不應該為 -1。為了驗證有沒有查詢到,需要在呼叫端判斷一下返回位置上的值和 key 是否相等。

當h的賦值條件為h=m時,肯定得用l

java二分查詢

public class binarysearch int value 11 int pos binarysearch int arrays,value system.out.println the pos is pos private static int binarysearch int int...

Java二分查詢

二分查詢的陣列是有序排列的。查詢時,會首先定位到陣列的中間位置,將中間值和查詢值比較,如果相等則返回,否則,如果當前元素值小於查詢值,則繼續在陣列的後面一半查詢,如果當前元素值大於查詢值,則在陣列的前面部分查詢,直到找到目標值或者無法再二分陣列時停止。static boolean binaryser...

java 二分查詢

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後...