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 相关文章推荐
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
Sep 22 Javascript
JS版网站风格切换实例代码
Oct 06 Javascript
高性能web开发 如何加载JS,JS应该放在什么位置?
May 14 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
Apr 18 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
Nov 29 Javascript
js中传递特殊字符(+,&amp;)的方法
Jan 16 Javascript
javascript检查浏览器是否支持flash的实现代码
Aug 14 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
Sep 21 Javascript
Bootstrap fileinput文件上传组件使用详解
Jun 06 Javascript
解析Vue.js中的组件
Feb 02 Javascript
node.js中ws模块创建服务端和客户端,网页WebSocket客户端
Mar 06 Javascript
vue中选中多个选项并且改变选中的样式的实例代码
Sep 16 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中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
PHP静态调用非静态方法的应用分析
2013/05/02 PHP
PHP生成不同颜色、不同大小的tag标签函数
2013/09/23 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
PHP文件操作详解
2016/12/30 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
关于document.cookie的使用javascript
2008/04/11 Javascript
jQuery中click事件的定义和用法
2014/12/20 Javascript
jQuery实现切换字体大小的方法
2015/03/10 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
2017/04/14 Javascript
加载 vue 远程代码的组件实例详解
2017/11/20 Javascript
JS实现图片转换成base64的各种应用场景实例分析
2018/06/22 Javascript
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
jQuery操作元素追加内容示例
2020/01/10 jQuery
jquery html添加元素/删除元素操作实例详解
2020/05/20 jQuery
Ant Design Pro 之 ProTable使用操作
2020/10/31 Javascript
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
查看Django和flask版本的方法
2018/05/14 Python
python3.5 email实现发送邮件功能
2018/05/22 Python
pygame实现俄罗斯方块游戏
2018/06/26 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
python实现二级登陆菜单及安装过程
2019/06/21 Python
Pycharm配置PyQt5环境的教程
2020/04/02 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
2021/02/26 Python
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
2013/06/06 HTML / CSS
用CSS3写的模仿iPhone中的返回按钮
2015/04/04 HTML / CSS
css3通过scale()、rotate()实现放大、旋转
2020/03/19 HTML / CSS
综合办公室个人的自我评价
2013/12/22 职场文书
保险专业求职信
2014/07/07 职场文书
创优争先心得体会
2014/09/11 职场文书
小学校园广播稿集锦
2014/10/04 职场文书
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python