二分查找

解析:二分查找,也为折半查找。对于一个从小到大排列的有序数组,首先要找到一个中间值,通过与中间值比较,大的放又,小的放在左边。再在两边中寻找中间值,持续以上操作,直到找到所在位置为止。

1.非递归实现

//对于一个从小到大的有序数列,返回查找值的索引(数组下标)
//二分查找,非递归方法
function BinSearch(arr, item){
var left = 0;
var right = arr.length-1;
while(left<=right){
var mid = Math.floor((left+right)/2);
if(item == arr[mid]){
return mid;
}else if(item > arr[mid]){
left = mid + 1;
}else{
right = mid - 1;
}
}
return false;
}
var arr=[-34, 1, 3, 4, 5, 8, 34, 45, 65, 87];
console.log(BinSearch(arr,5)); //

2.递归实现

//二分查找,递归方法
function BinSearch2(arr,item,left,right){
var left = left || 0;
var right = right || arr.length-1;
var mid = Math.floor((left+right)/2);
if(item == arr[mid]){
return mid;
}else if(item > arr[mid]){
return BinSearch2(arr,item,mid+1,right);
}else{
return BinSearch2(arr,item,left,mid-1);
}
return false;
}
var arr1=[-34, 1, 3, 4, 5, 8, 34, 45, 65, 87];
console.log(BinSearch2(arr1,5)); //

最新文章

  1. WPF实现物理效果 拉一个小球
  2. Swift3.0P1 语法指南——控制流
  3. 关于 客户端发现响应内容类型为“text/html; charset=utf-8”,但应为“text/xml”的解决方法
  4. du 命令
  5. UISegmentedControl 分段器加载不同的viewcontroller
  6. 【转载】 使用Anemometer基于pt-query-digest将MySQL慢查询可视化
  7. C语言中没有main函数生成可执行程序的几种方法
  8. 一口一口吃掉Volley(一)
  9. 【linux之进程管理,系统监控】
  10. UE4读取本地XML文件
  11. Android群英传笔记——第一章:Android体系与系统架构
  12. css postion 属性区别【原】
  13. Ubuntu18.04更换国内源
  14. vnc搭建
  15. Ansible Tower系列 二(安装 Tower)【转】
  16. Appium 设置手机连接方式
  17. Java 持久化发展历程
  18. python-redis列表模式
  19. 重新学习MySQL数据库3:Mysql存储引擎与数据存储原理
  20. C#中的异步调用及异步设计模式(三)——基于事件的异步模式

热门文章

  1. PAT甲级——A1089 Insert or Merge
  2. 03-python 学习第三天:文件操作
  3. C++中如何实现像Java中接口功能--C++抽象类(纯虚函数,虚函数)
  4. Linux设置复制粘帖的快捷方式
  5. 2019-8-31-C#-已知点和向量,求距离的点
  6. Leetcode513. Find Bottom Left Tree Value找树左下角的值
  7. Odoo的权限
  8. Ionic 发布Release 版本
  9. Django项目:CMDB(服务器硬件资产自动采集系统)--06--06CMDB测试Linux系统采集硬件数据的命令01
  10. js 给链接 url或href或js、css、图片等解决浏览器缓存