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 中的replace方法说明
Apr 13 Javascript
JS批量修改PS中图层名称的方法
Jan 26 Javascript
jQuery控制网页打印指定区域的方法
Apr 07 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
Sep 04 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
Feb 26 Javascript
JavaScript Date对象详解
Mar 01 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
Nov 22 Javascript
Angular实现购物车计算示例代码
Feb 21 Javascript
js仿拉勾网首页穿墙广告效果
Mar 08 Javascript
JavaScript转换数据库DateTime字段类型方法
Jun 27 Javascript
详解react-webpack2-热模块替换[HMR]
Aug 03 Javascript
JavaScript实现三级联动菜单效果
Aug 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
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
Views rows style模板重写代码
2011/05/16 PHP
深入解析PHP中逗号与点号的区别
2013/08/05 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
2017/02/04 PHP
jquery简单体验
2007/01/10 Javascript
javascript 浏览器检测代码精简版
2010/03/04 Javascript
导航跟随滚动条置顶移动示例代码
2013/09/11 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
2013/11/21 Javascript
基于jQuery Ajax实现上传文件
2016/03/24 Javascript
js canvas仿支付宝芝麻信用分仪表盘
2016/11/16 Javascript
浅谈Node.js:Buffer模块
2016/12/05 Javascript
AngularJS中$apply方法和$watch方法用法总结
2016/12/13 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
2017/01/17 Javascript
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
vue异步加载高德地图的实现
2018/06/19 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
JavaScript之数组扁平化详解
2019/06/03 Javascript
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
JavaScript数组类型Array相关的属性与方法详解
2020/09/08 Javascript
Python使用lxml模块和Requests模块抓取HTML页面的教程
2016/05/16 Python
Python连接PostgreSQL数据库的方法
2016/11/28 Python
Python爬虫实现验证码登录代码实例
2019/05/10 Python
Python 使用type来定义类的实现
2019/11/19 Python
Python+Django+MySQL实现基于Web版的增删改查的示例代码
2020/05/13 Python
利用Python批量识别电子账单数据的方法
2021/02/08 Python
Python就将所有的英文单词首字母变成大写
2021/02/12 Python
Css3新特性应用之形状总结
2016/12/08 HTML / CSS
Merrell美国官网:美国登山运动鞋品牌
2018/02/07 全球购物
eDreams意大利:南欧领先的在线旅行社
2018/11/23 全球购物
俄罗斯花园种植材料批发和零售网上商店:Беккер
2019/07/22 全球购物
C#的几个面试问题
2016/05/22 面试题
物流专业大学应届生求职信
2013/11/03 职场文书
某同学的自我鉴定范文
2013/12/26 职场文书
2014年医学生毕业自我鉴定
2014/03/26 职场文书
《故乡》教学反思
2014/04/10 职场文书