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 相关文章推荐
Microsfot .NET Framework4.0框架 安装失败的解决方法
Aug 14 Javascript
JS批量修改PS中图层名称的方法
Jan 26 Javascript
JQuery each()嵌套使用小结
Apr 18 Javascript
详解AngularJS的通信机制
Jun 18 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
Jul 29 Javascript
jQuery实现多级联动下拉列表查询框
Jan 18 Javascript
js定时器实例分享
Dec 20 Javascript
js中getter和setter用法实例分析
Aug 14 Javascript
在Vue项目中使用snapshot测试的具体使用
Apr 16 Javascript
vscode 插件开发 + vue的操作方法
Jun 05 Javascript
vue 解决addRoutes多次添加路由重复的操作
Aug 04 Javascript
解决vue打包 npm run build-test突然不动了的问题
Nov 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
mysql5详细安装教程
2007/01/15 PHP
php采集速度探究总结(原创)
2008/04/18 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
2014/11/19 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
基于JavaScript 数据类型之Boolean类型分析介绍
2013/04/19 Javascript
JS定时关闭窗口的实例
2013/05/22 Javascript
javascript 数组排序函数sort和reverse使用介绍
2013/11/21 Javascript
js的匿名函数使用介绍
2013/12/11 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
javascript框架设计之种子模块
2015/06/23 Javascript
Jquery ajax请求导出Excel表格的实现代码
2016/06/08 Javascript
React Native实现地址挑选器功能
2017/10/24 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
Odoo中如何生成唯一不重复的序列号详解
2018/02/10 Python
python递归法实现简易连连看小游戏
2020/03/25 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
2019/08/02 Python
python同步windows和linux文件
2019/08/29 Python
Python获取一个用户名的组ID过程解析
2019/09/03 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
python 有效的括号的实现代码示例
2019/11/11 Python
基于Python测试程序是否有错误
2020/05/16 Python
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
Html5页面中的返回实现的方法
2018/02/26 HTML / CSS
小学教研工作制度
2014/01/15 职场文书
煤矿安全生产责任书
2014/04/15 职场文书
高中教师考核方案
2014/05/18 职场文书
竞选班干部演讲稿100字
2014/08/20 职场文书
创业分两种人:那么哪些适合创业?,哪些适合不适合创业呢?
2019/08/23 职场文书
python 命令行传参方法总结
2021/05/25 Python
详解Java实践之适配器模式
2021/06/18 Java/Android
Spring Data JPA框架自定义Repository接口
2022/04/28 Java/Android
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS