Java实现二分查找算法详解
需积分: 37 98 浏览量
更新于2024-09-03
收藏 3KB TXT 举报
"二分查找算法的Java函数实现"
二分法查找算法,也称为折半查找,是一种在有序数组中查找特定元素的有效方法。它通过不断将搜索区间减半来减少查找次数,从而提高效率。以下是二分查找算法的Java函数实现。
首先,我们来看一个基本的二分查找函数,它接受一个已排序的数组`value`,一个查找范围的起始下标`begin`,终止下标`end`,以及要查找的关键字`key`。函数会返回找到的关键字在数组中的下标,如果没找到则返回-1。
```java
public static <T extends Comparable<? super T>> int binarySearch(T[] value, int begin, int end, T key) {
count = 0; // 统计比较次数,计算平均比较次数(ASL)
while (begin <= end) { // 边界有效
int mid = (begin + end) / 2; // 取中间位置,当前比较元素位置
// System.out.print("["+mid+"]="+value[mid]+"?"); // 显示比较中间结果,可省略
count++;
if (key.compareTo(value[mid]) == 0) { // 两对象相等
return mid; // 查找成功
} else if (key.compareTo(value[mid]) < 0) { // key对象较小
end = mid - 1; // 查找范围缩小到前半段
} else {
begin = mid + 1; // 查找范围缩小到后半段
}
}
return -1; // 查找不成功
}
```
这个函数首先初始化比较次数`count`为0,然后在while循环中,只要`begin`不大于`end`,就表示查找范围仍然有效。计算中间位置`mid`,然后比较`key`与`value[mid]`。如果两者相等,查找成功并返回`mid`。如果`key`小于`value[mid]`,则更新`end`为`mid - 1`,因为目标元素可能在中间位置的左侧;如果`key`大于`value[mid]`,则更新`begin`为`mid + 1`,因为目标元素可能在中间位置的右侧。如果循环结束仍未找到,说明查找不成功,返回-1。
另一个简化版的二分查找函数,它默认在整个数组范围内进行查找,即`begin`为0,`end`为数组长度减1:
```java
public static <T extends Comparable<? super T>> int binarySearch(T[] value, T key) {
return binarySearch(value, 0, value.length - 1, key);
}
```
这个简化版的函数直接调用了之前定义的完整版二分查找函数,减少了重复代码,并且提供了更方便的接口。
二分查找算法的时间复杂度为O(log n),空间复杂度为O(1),是高效查找算法,尤其适用于大数据量的有序数组或列表。然而,它需要数据预先排序,对于未排序的数据,通常需要先进行排序,这会增加额外的时间成本。
2010-09-08 上传
2011-03-30 上传
2024-02-23 上传
2023-05-27 上传
2023-04-14 上传
2023-04-28 上传
2023-06-12 上传
2023-06-12 上传
2023-08-26 上传
破晓( ̄∀ ̄)
- 粉丝: 4
- 资源: 16
最新资源
- C++多态实现机制详解:虚函数与早期绑定
- Java多线程与异常处理详解
- 校园导游系统:无向图实现最短路径探索
- SQL2005彻底删除指南:避免重装失败
- GTD时间管理法:提升效率与组织生活的关键
- Python进制转换全攻略:从10进制到16进制
- 商丘物流业区位优势探究:发展战略与机遇
- C语言实训:简单计算器程序设计
- Oracle SQL命令大全:用户管理、权限操作与查询
- Struts2配置详解与示例
- C#编程规范与最佳实践
- C语言面试常见问题解析
- 超声波测距技术详解:电路与程序设计
- 反激开关电源设计:UC3844与TL431优化稳压
- Cisco路由器配置全攻略
- SQLServer 2005 CTE递归教程:创建员工层级结构