二分查找
2021-04-30 本文已影响0人
dreamkid
二分查找
- 什么是二分查找
- 实现原理
什么是二分查找
二分查找是从一个有序数组中找到目标元素(通常是找下标)的过程
实现原理
先来看两张图
图例1
image
图例2
image
nums:有序数组
fromIndex:起始指针,跟toIndex一起确定查找范围
toIndex:结束指针,结合fromIndex确定查找范围
mid:中间指针,指向查找范围中间位置的指针
midValue:中间指针指向元素的值
- 查找过程:
首先指定查找范围是整个数组,然后找到中间指针指向的元素(midVal)的值跟目标值(如target)进行比对,如果midVal小于target,fromIndex指针从mid位置向右移动一位(图例2),反之toIndex从mid位置向左移动一位,重新确定查找范围,继续重复上述操作直到找到target等于midVal或者fromIndex>toIndex查找结束
代码实现:
public static int binarySearch(int[] nums, int target) {
int fromIndex = 0;
int toIndex = nums.length - 1;
while (fromIndex <= toIndex) {
int mid = (fromIndex + toIndex) >> 1;
int midVal = nums[mid];
if (midVal < target) {
fromIndex = mid + 1;
} else if (midVal > target) {
toIndex = mid - 1;
} else {
return mid;
}
}
return -1;
}