javascript 二分法(数组array)


Posted in Javascript onApril 24, 2010

在Javascript中,我们可以通过prototype关键字为对象添加新的属性或者是方法,下面是一个为Array对象添加二分法查找功能的方法:

Array.prototype.binarySearch = function(obj) 
{ 
var value = 0; 
var left = 0; 
var right= this.length; 
while(left <= right) 
{ 
var center = Math.floor((left+right)/2); 
if(this[center] == obj) 
{ 
value = center; 
} 
if(obj < this[center]) 
{ 
right = center - 1; 
} 
else 
{ 
left = center + 1; 
} 
} 
alert(value); 
} 
//如下为测试代码: 
function testArrayBinarySearch() 
{ 
var array = new Array(); 
var key = 678; 
var number = 1000; 
for (i = 0; i < number; i++) 
{ 
array.push(i); 
} 
array.binarySearch(key); 
} 
window.onload = function() 
{ 
testArrayBinarySearch(); 
}

下面是国外的代码
javascript二分法 //Copyright 2009 Nicholas C. Zakas. All rights reserved.
//MIT-Licensed, see source file
function binarySearch(items, value){ 
var startIndex = 0, 
stopIndex = items.length - 1, 
middle = Math.floor((stopIndex + startIndex)/2); 
while(items[middle] != value && startIndex < stopIndex){ 
//adjust search area(调整查找范围) 
if (value < items[middle]){ 
stopIndex = middle - 1; 
} else if (value > items[middle]){ 
startIndex = middle + 1; 
} 
//recalculate middle(重新计算中项索引) 
middle = Math.floor((stopIndex + startIndex)/2); 
} 
//make sure it's the right value(确保返回正确的值) 
return (items[middle] != value) ? -1 : middle; 
}
Javascript 相关文章推荐
JavaScript 不只是脚本
May 30 Javascript
javascript 解析后的xml对象的读取方法细解
Jul 25 Javascript
用js调用迅雷下载代码的二种方法
Apr 15 Javascript
js识别不同浏览器基于userAgent做判断
Jul 29 Javascript
js 动态给元素添加、移除事件的实现方法
Jul 19 Javascript
微信小程序 二维码canvas绘制实例详解
Jan 06 Javascript
写给小白看的JavaScript异步
Nov 29 Javascript
vue scroller返回页面记住滚动位置的实例代码
Jan 29 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
Jun 19 Javascript
Vue实现按钮级权限方案
Nov 21 Javascript
jQuery实现鼠标滑动切换图片
May 27 jQuery
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
Jun 24 Javascript
JS判断是否为数字,是否为整数,是否为浮点数的代码
Apr 24 #Javascript
JavaScript 比较时间大小的代码
Apr 24 #Javascript
google 搜索框添加关键字实现代码
Apr 24 #Javascript
javascript XMLHttpRequest对象全面剖析
Apr 24 #Javascript
javascript之AJAX框架使用说明
Apr 24 #Javascript
基于jquery的一个图片hover的插件
Apr 24 #Javascript
预加载css或javascript的js代码
Apr 23 #Javascript
You might like
PHP_MySQL教程-第一天
2007/03/18 PHP
PHP里的中文变量说明
2011/07/23 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
2014/06/19 PHP
Document对象内容集合(比较全)
2010/09/06 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
jQuery实现移动 和 渐变特效的点击事件
2015/02/26 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
2015/10/15 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
2016/04/17 Javascript
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
仿淘宝JSsearch搜索下拉深度用法
2018/01/15 Javascript
vue-cli扩展多模块打包的示例代码
2018/04/09 Javascript
Vue实现PopupWindow组件详解
2018/04/28 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
微信小程序下拉框组件使用方法详解
2018/12/28 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
jQuery实现小火箭返回顶部特效
2020/02/03 jQuery
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
python实现Dijkstra静态寻路算法
2019/01/17 Python
python实现贪吃蛇小游戏
2020/03/21 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
python对象转字典的两种实现方式示例
2019/11/07 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
英国电动工具购买网站:Anglia Tool Centre
2017/04/25 全球购物
马歇尔耳机官网:Marshall Headphones
2020/02/04 全球购物
经理管理专业自荐信范文
2013/12/31 职场文书
研究生毕业鉴定
2014/01/29 职场文书
营销总经理岗位职责
2014/02/02 职场文书
结对共建工作方案
2014/06/02 职场文书
党的群众路线教育实践活动个人剖析材料
2014/10/07 职场文书
房产协议书范本
2014/10/18 职场文书
详解Node.js如何处理ES6模块
2021/05/15 Javascript
详解nginx location指令
2022/01/18 Servers