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 相关文章推荐
原生js实现移动开发轮播图、相册滑动特效
Apr 17 Javascript
javascript实现对表格元素进行排序操作
Nov 18 Javascript
封装属于自己的JS组件
Jan 27 Javascript
详解Angular的双向数据绑定(MV-VM)
Dec 26 Javascript
微信小程序 数组中的push与concat的区别
Jan 05 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
Jan 26 Javascript
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
Nov 07 Javascript
mint-ui 时间插件使用及获取选择值的方法
Feb 09 Javascript
Vue配合iView实现省市二级联动的示例代码
Jul 27 Javascript
ES6入门教程之let、const的使用方法
Apr 13 Javascript
Element Notification通知的实现示例
Jul 27 Javascript
vue实现顶部菜单栏
Nov 08 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 登录记住密码实现思路
2013/05/07 PHP
php+mysql实现无限分类实例详解
2015/01/15 PHP
Zend Framework教程之模型Model用法简单实例
2016/03/04 PHP
PHP使用PDO操作数据库的乱码问题解决方法
2016/04/08 PHP
php文件系统处理方法小结
2016/05/23 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
2017/02/17 PHP
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
浅谈javascript 函数内部属性
2015/01/21 Javascript
深入理解JavaScript系列(36):设计模式之中介者模式详解
2015/03/04 Javascript
基于Css3和JQuery实现打字机效果
2015/08/11 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
jQuery为动态生成的select元素添加事件的方法
2016/08/29 Javascript
js实现扫雷小程序的示例代码
2017/09/27 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
jQuery ajax仿Google自动提示SearchSuggess功能示例
2019/03/28 jQuery
基于javascript实现日历功能原理及代码实例
2020/05/07 Javascript
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
Python使用正则匹配实现抓图代码分享
2015/04/02 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
python 同时运行多个程序的实例
2019/01/07 Python
Django框架models使用group by详解
2020/03/11 Python
linux面试题参考答案(5)
2014/09/01 面试题
社区安全检查制度
2014/02/03 职场文书
大学英语专业求职信
2014/06/21 职场文书
干部培训简讯
2015/07/20 职场文书
人生感悟经典句子
2019/08/20 职场文书
创业计划书之零食店(进口)
2019/09/24 职场文书
导游词之云南省玉龙雪山
2019/12/19 职场文书
python实现调用摄像头并拍照发邮箱
2021/04/27 Python
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python