二分查找也稱折半查找(Binary Search)救赐,它是一種效率較高的查找方法贴妻。但是切油,折半查找要求線性表必須采用順序存儲結(jié)構(gòu),而且表中元素按關(guān)鍵字有序排列名惩。
首先澎胡,假設(shè)表中元素是按升序排列,將表中間位置記錄的關(guān)鍵字與查找關(guān)鍵字比較娩鹉,如果兩者相等攻谁,則查找成功;否則利用中間位置記錄將表分成前弯予、后兩個子表戚宦,如果中間位置記錄的關(guān)鍵字大于查找關(guān)鍵字,則進(jìn)一步查找前一子表锈嫩,否則進(jìn)一步查找后一子表受楼。重復(fù)以上過程,直到找到滿足條件的記錄呼寸,使查找成功那槽,或直到子表不存在為止,此時查找不成功等舔。
java 代碼示例:
public class Solution {
public int search(int[] nums, int target) {
//定義初始最小骚灸、最大索引
int start = 0;
int end = nums.length - 1;
//確保不會出現(xiàn)重復(fù)查找,越界
while (start <= end) {
//計算出中間索引值
int middle = (end + start)>>>1 ;//防止溢出
if (target == nums[middle]) {
return middle;
//判斷下限
} else if (target < nums[middle]) {
end = middle - 1;
//判斷上限
} else {
start = middle + 1;
}
}
//若沒有慌植,則返回-1
return -1;
}
}