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异步处理工作机制详解
Apr 13 Javascript
为什么JS中eval处理JSON数据要加括号
Apr 13 Javascript
浅谈JavaScript字符串拼接
Jun 25 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
Aug 10 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
Oct 04 Javascript
jquery 将当前时间转换成yyyymmdd格式的实现方法
Jun 01 Javascript
vue-router 权限控制的示例代码
Sep 21 Javascript
Nuxt v-bind绑定img src不显示的解决
Dec 05 Javascript
微信小程序仿淘宝热搜词在搜索框中轮播功能
Jan 21 Javascript
Node.js API详解之 readline模块用法详解
May 22 Javascript
详解ES6 中的Object.assign()的用法实例代码
Jan 11 Javascript
JavaScript实现简单计时器
Jun 22 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
星际中的相关伤害
2020/03/04 星际争霸
什么是MVC,好东西啊
2007/05/03 PHP
php 模拟POST|GET操作实现代码
2010/07/20 PHP
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
2019/10/18 PHP
基于jquery的文章中所有图片width大小批量设置方法
2013/08/01 Javascript
JavaScript前端图片加载管理器imagepool使用详解
2014/12/29 Javascript
用模版生成HTML的的框架jquery.tmpl使用详解
2015/01/07 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
js实现星星打分效果的方法
2020/07/05 Javascript
javascript的BOM汇总
2015/07/16 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
2017/03/15 Javascript
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
详解nvm管理多版本node踩坑
2019/07/26 Javascript
JQuery常用简单动画操作方法回顾与总结
2019/12/07 jQuery
微信小程序个人中心的列表控件实现代码
2020/04/26 Javascript
详解Typescript里的This的使用方法
2021/01/08 Javascript
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
Python中动态检测编码chardet的使用教程
2017/07/06 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
Django之无名分组和有名分组的实现
2019/04/16 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
2020/05/13 Python
Python日志器使用方法及原理解析
2020/09/27 Python
土木工程毕业生推荐信
2013/10/28 职场文书
《金子》教学反思
2014/04/13 职场文书
软件售后服务方案
2014/05/29 职场文书
好的旅游活动方案
2014/08/19 职场文书
打架赔偿协议书范本
2014/10/26 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
论群众路线学习笔记
2014/11/06 职场文书
教师纪律作风整顿心得体会
2016/01/23 职场文书
Java实现斗地主之洗牌发牌
2021/06/14 Java/Android
使用python绘制分组对比柱状图
2022/04/21 Python