基于JavaScript实现的折半查找算法示例


Posted in Javascript onApril 14, 2017

本文实例讲述了基于JavaScript实现的折半查找算法。分享给大家供大家参考,具体如下:

折半查找也叫做二分查找,是针对有序表的一种查找方式,其思想如下:

将数组的第一个位置设为下边界;

将数组的最后一个位置设为上边界;

如果下边界等于或小于上边界,则做如下操作:

   将中点设置为上边界加下边界之和除以二;
   如果中点的元素小于查询的值,则将下边界设置为中点元素所在下标加1;
   如果中点的元素大于查询的值,则将上边界设置为中点元素所在下标减1;
   否则中点元素即为要查找的元素,可以进行返回。

折半查找代码如下:

function binSearch(arr,data){//折半查找,也叫二分查找
    var upperBound=arr.length-1;
    var lowerBound=0;
    while(lowerBound<=upperBound){//未遍历完
      var mid=Math.floor((lowerBound+upperBound)/2);
      document.write("当前中点为:"+mid+'<br>');//记录选中的中点
      if(arr[mid]<data){
        lowerBound=mid+1;
      }else if(arr[mid]>data){
        upperBound=mid-1;
      }else{
        return mid;
      }
    }
    return -1;
}

那么出现了重复的,我们需要计数。计数的思想就是在找到点的位置左右开始遍历,找到相同的则计数,找到不同的则停止遍历,代码如下:

function count(arr,data){//计算重复出现的次数
    var count=0;
    var position=binSearch(arr,data);//找出值所在位置
    if(position>-1){
      count++;//找到后,往左右一次遍历直到找到不同值后break
      for(var i=position-1;i>0;i--){
        if(arr[i]==data){
          count++;
        }else{
          break;
        }
      }
      for(var i=position+1;i<arr.length;i++){
        if(arr[i]==data){
          count++;
        }else{
          break;
        }
      }
    }
    return count;
}

最后是实验:

//实验
var nums=[1,2,2,3,3,4,5,6,7,8,9,10,11];
var bool=binSearch(nums,3);
document.write("所在位置为:"+bool+"<br>");
document.write("含有个数为:"+count(nums,3));
//当前中点为:6
//当前中点为:2
//当前中点为:4
//所在位置为:4
//当前中点为:6
//当前中点为:2
//当前中点为:4
//含有个数为:2

完整代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>JavaScript折半查找</title>
  </head>
  <body>
<script type="text/javascript">
  function binSearch(arr,data){//折半查找,也叫二分查找
    var upperBound=arr.length-1;
    var lowerBound=0;
    while(lowerBound<=upperBound){//未遍历完
      var mid=Math.floor((lowerBound+upperBound)/2);
      document.write("当前中点为:"+mid+'<br>');//记录选中的中点
      if(arr[mid]<data){
        lowerBound=mid+1;
      }else if(arr[mid]>data){
        upperBound=mid-1;
      }else{
        return mid;
      }
    }
    return -1;
  }
  function count(arr,data){//计算重复出现的次数
    var count=0;
    var position=binSearch(arr,data);//找出值所在位置
    if(position>-1){
      count++;//找到后,往左右一次遍历直到找到不同值后break
      for(var i=position-1;i>0;i--){
        if(arr[i]==data){
          count++;
        }else{
          break;
        }
      }
      for(var i=position+1;i<arr.length;i++){
        if(arr[i]==data){
          count++;
        }else{
          break;
        }
      }
    }
    return count;
  }
  //实验
  var nums=[1,2,2,3,3,4,5,6,7,8,9,10,11];
  var bool=binSearch(nums,3);
  document.write("所在位置为:"+bool+"<br>");
  document.write("含有个数为:"+count(nums,3));
  //当前中点为:6
  //当前中点为:2
  //当前中点为:4
  //所在位置为:4
  //当前中点为:6
  //当前中点为:2
  //当前中点为:4
  //含有个数为:2
</script>
  </body>
</html>

运行效果图如下:

基于JavaScript实现的折半查找算法示例

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jquery easyui的tabs使用时的问题
Mar 23 Javascript
图片onload事件触发问题解决方法
Jul 31 Javascript
简介JavaScript中的getSeconds()方法的使用
Jun 10 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
Mar 30 Javascript
基于AngularJS实现iOS8自带的计算器
Sep 12 Javascript
对Angular.js Controller如何进行单元测试
Oct 25 Javascript
微信小程序多列选择器range-key使用详解
Mar 30 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
Aug 17 Javascript
基于vue2.0实现简单轮播图
Nov 27 Javascript
bootstrap下拉框动态赋值方法
Aug 10 Javascript
vue封装一个简单的div框选时间的组件的方法
Jan 06 Javascript
使用JavaScript解析URL的方法示例
Mar 01 Javascript
AngularJS之自定义服务详解(factory、service、provider)
Apr 14 #Javascript
基于JavaScript实现的顺序查找算法示例
Apr 14 #Javascript
vue组件中点击按钮后修改输入框的状态实例代码
Apr 14 #Javascript
angularjs实现首页轮播图效果
Apr 14 #Javascript
如何使用bootstrap框架 bootstrap入门必看!
Apr 13 #Javascript
微信小程序 下拉菜单简单实例
Apr 13 #Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
Apr 13 #Javascript
You might like
PHP 向右侧拉菜单实现代码,测试使用中
2009/11/03 PHP
PHP为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
PHP下对字符串的递增运算代码
2010/08/21 PHP
PHP 日,周,月点击排行统计
2012/01/11 PHP
基于xcache的配置与使用详解
2013/06/18 PHP
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
php实现计算百度地图坐标之间距离的方法
2016/05/05 PHP
JavaScript 学习笔记(十一)
2010/01/19 Javascript
JS跨域总结
2012/08/30 Javascript
jquery cookie实现的简单换肤功能适合小网站
2013/08/25 Javascript
用JS实现3D球状标签云示例代码
2013/12/01 Javascript
Jquery给基本控件的取值、赋值示例
2014/05/23 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/06 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
react项目如何使用iconfont的方法步骤
2019/03/13 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
Python常用模块用法分析
2014/09/08 Python
python实现简单中文词频统计示例
2017/11/08 Python
python交互式图形编程实例(一)
2017/11/17 Python
PyQt5固定窗口大小的方法
2019/06/18 Python
python和c语言的主要区别总结
2019/07/07 Python
Python用input输入列表的实例代码
2020/02/07 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
Python监听剪切板实现方法代码实例
2020/11/11 Python
python中delattr删除对象方法的代码分析
2020/12/15 Python
CSS3 中的@keyframes介绍
2014/09/02 HTML / CSS
美国山地自行车、露营、户外装备和服装购物网站:Aventuron
2018/05/05 全球购物
设计部经理的岗位职责
2013/11/16 职场文书
个人租房协议书
2014/04/09 职场文书
2014年安置帮教工作总结
2014/12/11 职场文书
2015年司机年终工作总结
2015/05/14 职场文书
最美乡村教师观后感
2015/06/11 职场文书
蓝牙耳机怎么连接电脑win11? Win11蓝牙耳机连接电脑的技巧
2023/01/09 数码科技