二分搜索技术算法描述/java代码
时间: 2023-07-25 17:10:09 浏览: 47
二分搜索(Binary Search)是一种常见的搜索算法,也叫折半搜索。它是一种高效的查找有序数组中某一特定元素的算法,时间复杂度为 O(log n)。
二分搜索的基本思路是:将待查找区间不断缩小为原来的一半,直到找到目标元素或者区间为空为止。具体实现如下:
1. 初始化 left=0, right=n-1,表示要在数组 nums[left...right] 中查找目标元素。
2. 每次取区间的中间位置 mid=(left+right)/2,将目标元素与 nums[mid] 比较:
- 如果目标元素等于 nums[mid],返回 mid;
- 如果目标元素小于 nums[mid],说明目标元素在左半部分,将 right=mid-1;
- 如果目标元素大于 nums[mid],说明目标元素在右半部分,将 left=mid+1;
3. 重复步骤2,直到找到目标元素或者区间为空。
下面是二分搜索的 Java 代码实现:
```java
public int binarySearch(int[] nums, int target) {
int left = 0, right = nums.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1; // 目标元素不存在
}
```
其中,nums 表示要查找的有序数组,target 表示目标元素。如果找到目标元素,返回其下标;否则返回 -1。注意要用 left + (right - left) / 2 来求中间位置,而不是 (left + right) / 2,以避免整型溢出。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_lunwen.png)
![-](https://csdnimg.cn/download_wenku/file_type_lunwen.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)