二分查找的前提为:数组、有序。逻辑为:优先和数组的中间元素比较,如果等于中间元素,则直接返回。如果不等于则取半继续查找。
/**
* 二分查找,递归实现。
* @param target
* @param arr
* @param start
* @param end
* @returns {*}
*/
function binarySearch(target,arr,start,end) {
var start = start || 0;
var end = end || arr.length-1;
var mid = parseInt(start+(end-start)/2);
if(target==arr[mid]){
return mid;
}else if(target>arr[mid]){
return binarySearch(target,arr,mid+1,end);
}else{
return binarySearch(target,arr,start,mid-1);
}
return -1;
}
/**
* 有序的二分查找,返回-1或存在的数组下标。不使用递归实现。
* @param target
* @param arr
* @returns {*}
*/
function binarySearch(target,arr) {
var start = 0;
var end = arr.length-1;
while (start<=end){
var mid = parseInt(start+(end-start)/2);
if(target==arr[mid]){
return mid;
}else if(target>arr[mid]){
start = mid+1;
}else{
end = mid-1;
}
}
return -1;
}
写完有序,自然而然的想到了无序的情况如何使用二分查找呢?马上想到先使用快排分组,分好组再二分。代码如下:
/**
* 无序的二分查找。返回true/false
* @param target
* @param arr
* @returns {boolean}
*/
function binarySearch(target,arr) {
while (arr.length>0){
//使用快速排序。以mid为中心划分大小,左边小,右边大。
var left = [];
var right = [];
//选择第一个元素作为基准元素(基准元素可以为任意一个元素)
var pivot = arr[0];
//由于取了第一个元素,所以从第二个元素开始循环
for(var i=1;i<arr.length;i++){
var item = arr[i];
//大于基准的放右边,小于基准的放左边
item>pivot ? right.push(item) : left.push(item);
}
//得到经过排序的新数组
if(target==pivot){
return true;
}else if(target>pivot){
arr = right;
}else{
arr = left;
}
}
return false;
}
写完用快速排序实现的无序二分查找,仔细想了一下该算法的时间复杂度,发现还不如直接一个for循环来得快
以上所述是小编给大家介绍的JavaScript实现二分查找实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# javascript二分查找
# JavaScript中二分查找的例题详解
# JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
# JavaScript折半查找(二分查找)算法原理与实现方法示例
# JS二分查找算法详解
# js基本算法:冒泡排序
# 二分查找的简单实例
# js实现的二分查找算法实例
# javascript实现二分查找法实现代码
# JS实现二分查找的示例代码
# 递归
# 第一个
# 写完
# 小编
# 在此
# 第二个
# 给大家
# 想了
# 不等于
# 自然而然
# 所述
# 如何使用
# 给我留言
# 感谢大家
# 疑问请
# 有任何
# 来得快
# arr
# target
# param
相关文章:
建站之星在线客服如何快速接入解答?
公司网站设计制作厂家,怎么创建自己的一个网站?
音乐网站服务器如何优化API响应速度?
网站专业制作公司有哪些,做一个公司网站要多少钱?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
如何快速查询域名建站关键信息?
建设网站制作价格,怎样建立自己的公司网站?
临沂网站制作企业,临沂第三中学官方网站?
建站主机与服务器功能差异如何区分?
如何快速上传建站程序避免常见错误?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
制作网站的公司有哪些,做一个公司网站要多少钱?
如何零基础开发自助建站系统?完整教程解析
自助网站制作软件,个人如何自助建网站?
如何通过cPanel快速搭建网站?
湖北网站制作公司有哪些,湖北清能集团官网?
建站之星ASP如何实现CMS高效搭建与安全管理?
如何快速搭建高效WAP手机网站吸引移动用户?
建站之星安装路径如何正确选择及配置?
已有域名如何快速搭建专属网站?
免费ppt制作网站,有没有值得推荐的免费PPT网站?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
如何快速搭建个人网站并优化SEO?
建站之星安装后如何配置SEO及设计样式?
h5在线制作网站电脑版下载,h5网页制作软件?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
Bpmn 2.0的XML文件怎么画流程图
,石家庄四十八中学官网?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
nginx修改上传文件大小限制的方法
简单实现Android文件上传
建站之星如何通过成品分离优化网站效率?
为什么Go需要go mod文件_Go go mod文件作用说明
,制作一个手机app网站要多少钱?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
Python如何创建带属性的XML节点
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
潮流网站制作头像软件下载,适合母子的网名有哪些?
如何在宝塔面板中修改默认建站目录?
如何通过智能用户系统一键生成高效建站方案?
小型网站制作HTML,*游戏网站怎么搭建?
如何用西部建站助手快速创建专业网站?
如何快速辨别茅台真假?关键步骤解析
如何通过山东自助建站平台快速注册域名?
建站之星代理商如何保障技术支持与售后服务?
*请认真填写需求信息,我们会在24小时内与您取得联系。