java编程实现二分法
时间: 2023-12-10 18:43:51 浏览: 79
二分法是一种常用的搜索算法,可以在有序数组中快速查找目标元素。下面是一个Java编程实现二分法的示例代码:
```java
public static int binarySearch(int\[\] arr, int target) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr\[mid\] == target) {
return mid;
} else if (arr\[mid\] > target) {
right = mid - 1;
} else if (arr\[mid\] < target) {
left = mid + 1;
}
}
return -1;
}
```
这段代码使用了一个while循环来不断缩小搜索范围,直到找到目标元素或者搜索范围为空。在每一次循环中,通过计算中间索引mid来确定当前搜索范围的中间元素。如果中间元素等于目标元素,则返回该索引。如果中间元素大于目标元素,则将搜索范围缩小到左半部分。如果中间元素小于目标元素,则将搜索范围缩小到右半部分。如果循环结束时仍然没有找到目标元素,则返回-1表示未找到。
除了手动实现二分法,Java还提供了一个内置的二分搜索函数`Collections.binarySearch(List, target)`,可以直接使用该函数进行二分搜索。
另外,如果要找到目标元素第一次或最后一次出现的位置,可以稍作修改。可以使用上面的方法找到第一个大于目标元素的下标index,然后返回index-1对应的元素的位置。具体代码如下:
```java
public static int binarySearch(int\[\] arr, int target) {
int left = 0;
int right = arr.length;
while (left < right) {
int mid = (left + right) / 2;
if (arr\[mid\] > target) {
right = mid;
} else {
left = mid + 1;
}
}
return left - 1;
}
```
这段代码与之前的代码唯一的区别在于最后一行的返回语句,返回的是left-1。这样就可以找到目标元素第一次出现的位置。
希望这个回答对你有帮助!
#### 引用[.reference_title]
- *1* *2* *3* [二分法 java](https://blog.csdn.net/longzu233/article/details/123402245)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文