
JS实现二分搜索
发布日期:2021-05-04 17:18:38
浏览次数:16
分类:精选文章
本文共 1063 字,大约阅读时间需要 3 分钟。
二分查找的前提为:数组、有序。逻辑为:优先和数组的中间元素比较,如果等于中间元素,则直接返回。如果不等于则取半继续查找。
非递归实现
function binarySearch(arr, target){ var h = arr.length - 1, l = 0; while(l <= h){ var m = Math.floor((h + l) / 2); if(arr[m] == target){ return m; } if(target > arr[m]){ l = m + 1; }else{ h = m - 1; } } return false;}var arr = [-34, 1, 3, 4, 5, 8, 34, 45, 65, 87];binarySearch(arr,4);
递归版本
function binarySearch (arr, target, start, end) { if (end == undefined) { // 此处不能写成end = end || arr.length - 1形式, // 因为递归调用的时候参数的域变了。如果不用这种写法,可以将此处if语句去掉,直接在外面调用函数时传参。 end = arr.length - 1 } if (start == undefined) { start = 0 } var m = Math.floor((start + end) / 2) if (arr[m] == target) { return m } if (start >= end) { return false } if (target < arr[m]) { return binarySearch(arr, target, start, m - 1) } else { return binarySearch(arr, target, m + 1, end) }}var arr = [-34, 1, 3, 4, 5, 8, 34, 45, 65, 87]binarySearch(arr, 4)
发表评论
最新留言
不错!
[***.144.177.141]2025年03月24日 09时21分24秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
如何用IDEA开启断言
2019-03-06
Java:谈谈控制线程的几种办法
2019-03-06
Java:枚举类也就这么回事
2019-03-06
【Java并发编程】常见基础问题整理
2019-03-06
SpringBoot整合FreeMarker模板引擎
2019-03-06
Java中Runtime类详细总结
2019-03-06
Java并发包源码学习系列:挂起与唤醒线程LockSupport工具类
2019-03-06
由 [SDOI2012]Longge的问题 探讨欧拉函数和莫比乌斯函数的一些性质和关联
2019-03-06
洛谷P5364 [SNOI2017]礼物 题解
2019-03-06
Python基础之用户交互、流程控制、循环语句
2019-03-06
表的相关数据
2019-03-06
IDEA 出现错误:找不到或无法加载主类
2019-03-06
JSP中引用CSS样式文件却无法显示的问题解决方案
2019-03-06
Invalid bound statement (not found)报错的可能原因
2019-03-06
MapReduce之自定义分区器Partitioner
2019-03-06
/dev/null--Linux系统黑洞,解决控制台的刷屏问题
2019-03-06
scala:分别使用懒汉式和饿汉式实现单例模式
2019-03-06
如何使用python把json文件转换为csv文件
2019-03-06
强大的拉姆表达式转Sql 类库 - SqlSugar 隐藏功能之Lambda
2019-03-06
让JS写的更接近OOP
2019-03-06