首页 > 其他分享 >JS实现二分搜索

JS实现二分搜索

时间:2022-10-13 17:05:26浏览次数:75  
标签:二分 arr end target JS start 搜索 return binarySearch


二分查找的前提为:数组、有序。逻辑为:优先和数组的中间元素比较,如果等于中间元素,则直接返回。如果不等于则取半继续查找。

非递归实现

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)

 

标签:二分,arr,end,target,JS,start,搜索,return,binarySearch
From: https://blog.51cto.com/u_13028258/5754011

相关文章

  • JS面试点- bind / call / apply
    bind/call/apply可用于this的显式绑定this绑定的是call,apply,bind的第一个参数​​call()方法​​vara={user:'fx',fn:function(){console.......
  • 在考虑闭包的情况下JS变量存储在栈与堆的区分
    变量存储在闭包中的问题按照常理来说栈中数据在函数执行结束后就会被销毁,那么 ​​JavaScript​​ 中函数闭包该如何实现,先简单来个闭包:functioncount(){letnum=......
  • js 输入框中过滤表情,颜文字(正则)
    letname=this.name //this.name为输入框中的输入内容 varregStr=/[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uD......
  • JS判断数组中是否包含某个值
    方法一:array.indexOf此方法判断数组中是否存在某个值,如果存在,则返回数组元素的下标,否则返回-1。vararr=[1,2,3,4]varindex=arr.indexOf(3)console.log(index)方法......
  • JS实现继承的方法
    方法一:借助callfunctionParent(sex){this.name='fx'this.sex=sex}Parent.prototype.test=function(){console.log('我是函数')}Parent.prototype.wh......
  • watch 监视搜索关键词的变化不断发送请求返回建议
    watch:{keywords:{//yarnaddlodash下载lodash包//import{debounce}from"lodash";引入防抖的函数//每隔700ms执行一次handler......
  • js判断手机系统是android还是ios?
    varu=navigator.userAgent;//识别各种浏览器varisAndroid=u.indexOf('Android')>-1||u.indexOf('Adr')>-1;//android终端varisiOS=!!u.match(/\(i[^;]......
  • 算法简介及二分法查找
    算法及二分法算法算法就是解决问题的有效方法,一个算法可能是针对某个问题而设计的,也可以是针对某些问题而设计。在python中,如何对列表进行一系列操作的内置方法是一系列......
  • js倒计时
    倒计时//倒计时输入时间-现在时间varinputTime=prompt('请输入当前时间,格式为YYYY-MM-DD或YYYY/MM/DD');//prompt返回值是字符串要进行数据类型转换......
  • js逆向案例
    js逆向案例目录零、概述一、请求参数|Cookie|Referer校验(⭐)1、案例1_有道翻译2、案例2_百度翻译二、参数响应如何获取AES、DES、RSA(⭐)1、案例3_建筑市场_AES2、案例4_毛毛租......