因?yàn)槲覀兂跏蓟?right = nums.length - 1
所以決定了我們的「搜索區(qū)間」是 [left, right]
所以決定了 while (left <= right)
同時(shí)也決定了 left = mid+1 和 right = mid-1
因?yàn)槲覀冎恍枵业揭粋€(gè) target 的索引即可
所以當(dāng) nums[mid] == target 時(shí)可以立即返回
/**
* 二分查找
*/
public class erFen {
private static final String TAG = "erFen";
public static void main(String[] args){
int[] array = new int[100];
for(int i=0; i<100;i++){
array[i] = i;
}
System.out.println(binarySearch(array, 31));
}
private static int binarySearch(int[] array, int target){
int start=0;//最小下標(biāo)
int end=array.length-1;//最大下標(biāo)
int mid;//中間下標(biāo)
while (start<=end){
// mid=start+(end-start)/2;
mid=(end+start)/2; //折半下標(biāo)
if (target>array[mid]){//關(guān)鍵字比折半值大,則最小下標(biāo)調(diào)成折半下標(biāo)的下一位
start=mid+1;
}else if (target<array[mid]){//關(guān)鍵字比折半值小,則最大下標(biāo)調(diào)成折半下標(biāo)的前一位
end=mid-1;
}else {
return mid;
}
}
return -1;
}
}