
二分查找算法
发布日期:2021-05-08 11:29:55
浏览次数:12
分类:精选文章
本文共 3689 字,大约阅读时间需要 12 分钟。
文章目录
1 原理
时间复杂度为O(logn)。
2 实现
import java.util.Arrays;/** * 二分查找算法 * * @author wgm * @since 2021/4/18 */public class BinarySearch { public static void main(String[] args) { int[] ints = { -30, -30, -15, -2, 0, 2, 2, 2, 2, 7, 8, 13, 22, 27, 99, 99, 100, 333, 666, 999}; int key = 2; System.out.println("数组:" + Arrays.toString(ints)); System.out.println("递归查找:\t数字" + key + "在数组中下标为" + binarySearch(ints, key, true)); System.out.println("非递归查找:\t数字" + key + "在数组中下标为" + binarySearch(ints, key, false)); } /** * 二分查找(递归/非递归) * * @param ints * @param key * @param recursion * @return */ private static int binarySearch(int[] ints, int key, boolean recursion) { if (ints == null || ints.length == 0) { return -1; } if (recursion) { return binarySearch(ints, 0, ints.length - 1, key); } else { return binarySearch(ints, key); } } private static int binarySearch(int[] ints, int key) { int from = 0; int to = ints.length; while (from < to) { int mid = from + (to - from) / 2; if (ints[mid] > key) { to = mid - 1; } else if (ints[mid] < key) { from = mid + 1; } else { return mid; } } return -1; } private static int binarySearch(int[] ints, int from, int to, int key) { int mid = from + (to - from) / 2; if (ints[mid] == key) { return mid; } if (from >= to) { return -1; } if (ints[mid] > key) { return binarySearch(ints, from, mid - 1, key); } else { return binarySearch(ints, mid + 1, to, key); } }}
3 测试
D:\program\Java\jdk1.8.0_241\bin\java.exe -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:63454,suspend=y,server=n "-javaagent:C:\Users\GMWANG~1\AppData\Local\Temp\captureAgent8jars\debugger-agent.jar" -Dfile.encoding=UTF-8 -classpath "D:\program\Java\jdk1.8.0_241\jre\lib\charsets.jar;D:\program\Java\jdk1.8.0_241\jre\lib\deploy.jar;D:\program\Java\jdk1.8.0_241\jre\lib\ext\access-bridge-64.jar;D:\program\Java\jdk1.8.0_241\jre\lib\ext\cldrdata.jar;D:\program\Java\jdk1.8.0_241\jre\lib\ext\dnsns.jar;D:\program\Java\jdk1.8.0_241\jre\lib\ext\jaccess.jar;D:\program\Java\jdk1.8.0_241\jre\lib\ext\jfxrt.jar;D:\program\Java\jdk1.8.0_241\jre\lib\ext\localedata.jar;D:\program\Java\jdk1.8.0_241\jre\lib\ext\nashorn.jar;D:\program\Java\jdk1.8.0_241\jre\lib\ext\sunec.jar;D:\program\Java\jdk1.8.0_241\jre\lib\ext\sunjce_provider.jar;D:\program\Java\jdk1.8.0_241\jre\lib\ext\sunmscapi.jar;D:\program\Java\jdk1.8.0_241\jre\lib\ext\sunpkcs11.jar;D:\program\Java\jdk1.8.0_241\jre\lib\ext\zipfs.jar;D:\program\Java\jdk1.8.0_241\jre\lib\javaws.jar;D:\program\Java\jdk1.8.0_241\jre\lib\jce.jar;D:\program\Java\jdk1.8.0_241\jre\lib\jfr.jar;D:\program\Java\jdk1.8.0_241\jre\lib\jfxswt.jar;D:\program\Java\jdk1.8.0_241\jre\lib\jsse.jar;D:\program\Java\jdk1.8.0_241\jre\lib\management-agent.jar;D:\program\Java\jdk1.8.0_241\jre\lib\plugin.jar;D:\program\Java\jdk1.8.0_241\jre\lib\resources.jar;D:\program\Java\jdk1.8.0_241\jre\lib\rt.jar;D:\project\untitled\out\production\untitled;D:\program\JetBrains\IntelliJ IDEA 2020.1\lib\idea_rt.jar" BinarySearchConnected to the target VM, address: '127.0.0.1:63454', transport: 'socket'数组:[-30, -30, -15, -2, 0, 2, 2, 2, 2, 7, 8, 13, 22, 27, 99, 99, 100, 333, 666, 999]递归查找: 数字2在数组中下标为6非递归查找: 数字2在数组中下标为7Disconnected from the target VM, address: '127.0.0.1:63454', transport: 'socket'Process finished with exit code 0
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月06日 17时54分57秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
王爽 《汇编语言》 读书笔记 三 寄存器(内存访问)
2021-05-07
Android基本知识
2021-05-08
命令模式【Command Pattern】
2021-05-08
OSI 7 层网络模型
2021-05-08
JDK 内置的多线程协作工具类的使用场景
2021-05-08
Java 中哪些对象可以获取类对象
2021-05-08
linux 的 cp 命令如何复制不提示覆盖
2021-05-08
linux 的 sleep 命令
2021-05-08
js 的 let var const 区别
2021-05-08
11.2.6 时间值的小数秒
2021-05-08
11.2.7 日期和时间类型之间的转换
2021-05-08
redis 内存溢出_从数据存储的角度告诉你Redis为什么这么快!
2021-05-08
实例分析Facebook激励视频广告接入
2021-05-08
实例:使用OKGO下载网络压缩包资源,然后解压缩放在本地使用
2021-05-08
解决mybatis嵌套查询使用PageHelper分页不准确
2021-05-08
Redis源码分析(七)--- zipmap压缩图
2021-05-08
大规模集群自动化部署工具--Chef的安装部署
2021-05-08