基本原理
时间复杂度:
(n => n/2 => n/4 --- 1)
说明:
- 必须是有序数列
- 从序列中间开始于定值比较
- 若 current(n) = key, 则为目标数
- 举例:
0——1——2——3——4——5——>
![]()
中查找
![]()
![]()
原理:
给定精度
求
零点近似值
因为
则
查找数组中的目标
递归实现
public int findPosition(int[] nums, int target) {
return binarySearch(nums, 0, nums.length - 1, target);
}
public int binarySearch(int[] nums, int start, int end, int target) {
if (start > end) {
return -1;
}
int mid = (start + end) / 2;
if (nums[mid] == target) {
return mid;
}
if (nums[mid] < target) {
return binarySearch(nums, mid + 1, end, target);
}
return binarySearch(nums, start, mid - 1, target);
}
非递归实现
public int findPosition(int[] nums, int target) {
if (nums == null || nums.length == 0) {
return -1;
}
int start = 0, end = nums.length - 1;
while (start < end) {
int mid = (start + end) / 2;
if (nums[mid] == target) {
return mid;
}
if (nums[mid] < target) {
start = mid + 1;
}
if (nums[mid] > target) {
end = mid - 1;
}
}
if (nums[start] == target) {
return start;
}
return -1;
}