二分查找(Binary Search)的递归和非递归
2024-10-02 05:08:30
Binary Search 有时候我们也把它叫做二进制查找
是一种较为高效的再数组中查找目标元素的方法
我们可以通过递归和非递归两种方式来实现它
//非递归
public static int binarySearch(int[] arr, int x) {
int low = 0;
int high = arr.length-1;
while(low <= high) {
int middle = (low + high)/2;
if(x == arr[middle]) {
return middle;
}else if(x <arr[middle]) {
high = middle - 1;
}else {
low = middle + 1;
}
}
return -1;
}
//递归实现二分查找
public static int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){
int midIndex = (beginIndex+endIndex)/2;
if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){
return -1;
}
if(data <dataset[midIndex]){
return binarySearch(dataset,data,beginIndex,midIndex-1);
}else if(data>dataset[midIndex]){
return binarySearch(dataset,data,midIndex+1,endIndex);
}else {
return midIndex;
}
}
时间复杂度是O(log2 n)的,最差情况是log2(n+1)
最新文章
- C#开发微信门户及应用(30)--消息的群发处理和预览功能
- 性能测试框架Locust初学笔记
- 关于TCP的粘包
- 基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
- 【超详细教程】使用Windows Live Writer 2012和Office Word 2013 发布
- 创建parameter id
- 在Android手机上安装linux系统
- windows Nginx基本使用方法
- C#区域截图&mdash;&mdash;调用API截图
- 【Alpha】——Seventh Scrum Meeting
- ORACLE DB TRIGGER详解
- window批处理修改计算机名
- Bootstrap -- 文本,背景,其他样式
- flask之wtforms
- Codeforces Round #512 (Div. 2) D. Vasya and Triangle
- CSS计数器(序列数字字符自动递增)详解———张鑫旭
- java中的设计模式一 装饰模式
- css 设置背景图片铺满固定不动
- Exce行列变色
- Mybatis最入门---代码自动生成(generatorConfig.xml配置)
热门文章
- 机器学习: Tensor Flow with CNN 做表情识别
- asp.net (webapi) core 2.1 跨域配置
- 解决MacOS下readlink: illegal option -- f
- 利用最小二乘法拟合任意次函数曲线(C#)
- NetCore 上传,断点续传,可支持流上传
- Win8 Metro(C#)数字图像处理--2.60部分彩色保留算法
- php 如何利用 soap调用.Net的WebService asmx文件
- MySql5.7.11 for Windows 安装(二)
- 在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程!(更好的管理异常)
- windows和linux双系统,重新分区后修复grub