【查找】二分查找(Binary Search)
程序员文章站
2024-01-04 15:50:52
...
二分查找(Binary Search)
思想:在有序数组中,取中间数作为比较对象,如果查找值与中间数相等,则查找成功;如果查找值比中间数小,则在左半区间继续查找;如果查找值比中间数大,则继续在右半区间查找。不断重复上述过程,直到查找成功。
时间复杂度:
PS:注意,nums是有序数组,另外wihle循环条件为low<=high,注意还有等于号。举例,当nums中只有一个数的之后,low==high,这个时候应该进入循环继续查找。
public class test1 {
public static int BinarySearch(int[] nums, int key) {
int low, high, mid;
low = 0;
high = nums.length - 1;
while(low <= high) { //这个地方注意是小于等于
mid = (low + high) / 2; //中间值
if(key < nums[mid]) { //若查找值比中间值小
high = mid - 1; //在左半区间查找
}
else if(key > nums[mid]) { //若查找值比中间值大
low = mid + 1; //在右半区间查找
}
else {
return mid; //查找值等于中间值
}
}
return 0; //查找失败
}
public static void main(String[] args) {
int[] nums = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int res = BinarySearch(nums, 6);
System.out.println(res);
}
}