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去除空格的几种方法
Oct 03 Javascript
疯掉了,尽然有js写的操作系统
Apr 23 Javascript
js 动态文字滚动的例子
Jan 17 Javascript
用Javascript获取页面元素的具体位置
Dec 09 Javascript
jquery通过closest选择器修改上级元素的方法
Mar 17 Javascript
JavaScript获取一个范围内日期的方法
Apr 24 Javascript
json的使用小结
Jun 08 Javascript
浅谈js数组和splice的用法
Dec 04 Javascript
ES6概念 Symbol toString()方法
Dec 25 Javascript
浅谈$_FILES数组为空的原因
Feb 16 Javascript
Node.js 如何利用异步提升任务处理速度
Jan 07 Javascript
微信小程序在text文本实现多种字体样式
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下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
PHP 函数学习简单小结
2010/07/08 PHP
php正则表达式(regar expression)
2011/09/10 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
JavaScript 继承详解 第一篇
2009/08/30 Javascript
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
2010/03/20 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
2015/01/18 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
js实现缓冲运动效果的方法
2015/04/10 Javascript
js命名空间写法示例
2015/12/18 Javascript
jquery表单插件form使用方法详解
2017/01/20 Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
2017/12/07 Javascript
js保留两位小数方法总结
2018/01/31 Javascript
React 使用browserHistory项目访问404问题解决
2018/06/01 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
基于vue、react实现倒计时效果
2019/08/26 Javascript
jQuery实现数字华容道小游戏(实例代码)
2020/01/16 jQuery
[01:45]2014DOTA2 TI预选赛预选赛 大神专访第二弹!
2014/05/20 DOTA
python BeautifulSoup设置页面编码的方法
2015/04/03 Python
Python正则表达式知识汇总
2017/09/22 Python
python json.loads兼容单引号数据的方法
2018/12/19 Python
python之生成多层json结构的实现
2020/02/27 Python
如何利用python发送邮件
2020/09/26 Python
CSS3实现多背景模拟动态边框的效果
2016/11/08 HTML / CSS
不可轻视HTML5!App三年内将被html5顶替彻底消失
2015/11/18 HTML / CSS
质检部部长职责
2013/12/16 职场文书
决定成败的关键——创业计划书
2014/01/24 职场文书
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
求职简历自我评价范例
2014/03/12 职场文书
经典公益广告词
2014/03/13 职场文书
《水上飞机》教学反思
2014/04/10 职场文书
英语故事演讲稿
2014/04/29 职场文书
作风建设演讲稿
2014/05/23 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL