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 CSS修改学习第六章 拖拽
Feb 19 Javascript
基于jquery的复制网页内容到WORD的实现代码
Feb 16 Javascript
容易被忽略的JS脚本特性
Sep 13 Javascript
jQuery实现密保互斥问题解决方案
Aug 16 Javascript
JavaScript支持的最大递归调用次数分析
Jun 24 Javascript
javascript快速排序算法详解
Sep 17 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
Aug 06 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
Jan 21 Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
Feb 28 Javascript
Vue学习笔记之计算属性与侦听器用法
Dec 07 Javascript
使用Vue 自定义文件选择器组件的实例代码
Mar 04 Javascript
React 高阶组件HOC用法归纳
Jun 13 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的图形函数中显示汉字
2006/10/09 PHP
收集的php编写大型网站问题集
2007/03/06 PHP
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
2015/11/10 PHP
php实现Session存储到Redis
2015/11/11 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
PHP通过引用传递参数用法分析
2016/12/01 PHP
jquery live()调用不存在的解决方法
2014/02/26 Javascript
jquery实现select选中行、列合计示例
2014/04/25 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
2014/08/07 Javascript
JavaScript 性能优化小结
2015/10/12 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
2016/05/17 Javascript
json与jsonp知识小结(推荐)
2016/08/16 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
JavaScript实现与使用发布/订阅模式详解
2019/01/19 Javascript
vue多次循环操作示例
2019/02/08 Javascript
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
JavaScript创建表格的方法
2020/04/13 Javascript
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
python命令 -u参数用法解析
2019/10/24 Python
python使用yield压平嵌套字典的超简单方法
2019/11/02 Python
解决pytorch DataLoader num_workers出现的问题
2020/01/14 Python
详解Python中的文件操作
2021/01/14 Python
六一儿童节主持词
2014/03/21 职场文书
关爱留守儿童倡议书
2014/04/15 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
行政文员实习自我鉴定范文
2014/09/14 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
总结会主持词
2015/07/02 职场文书
幼儿园春季开学通知
2015/07/16 职场文书
2015年依法治校工作总结
2015/07/27 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书