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之可拖动的iframe效果代码
Aug 01 Javascript
JQuery困惑—包装集 DOM节点
Oct 16 Javascript
Microsoft Ajax Minifier 压缩javascript的方法
Mar 05 Javascript
JavaScript类和继承 this属性使用说明
Sep 03 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
Jul 20 Javascript
基于js与flash实现的网站flv视频播放插件代码
Oct 14 Javascript
jQuery随机密码生成的方法
Mar 09 Javascript
不用一句js代码初始化组件
Jan 27 Javascript
JavaScript requestAnimationFrame动画详解
Sep 14 Javascript
Vue form表单动态添加组件实战案例
Sep 02 Javascript
微信小程序tabBar设置实例解析
Nov 14 Javascript
JavaScript中的执行环境和作用域链
Sep 04 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
PHP4 与 MySQL 数据库操作函数详解
2006/12/06 PHP
浅析十款PHP开发框架的对比
2013/07/05 PHP
php字符串过滤与替换小结
2015/01/26 PHP
php微信公众号开发模式详解
2016/11/28 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
2020/06/06 PHP
ajax上传时参数提交不更新等相关问题
2012/12/11 Javascript
JavaScript实现弹出子窗口并传值给父窗口
2014/12/18 Javascript
PHP实现的各种中文编码转换类分享
2015/01/23 Javascript
JS实现黑色大气的二级导航菜单效果
2015/09/18 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
2016/01/29 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
JS获取字符串实际长度(包含汉字)的简单方法
2016/08/11 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
关于jQuery EasyUI 中刷新Tab选项卡后一个页面变形的解决方法
2017/03/02 Javascript
详解ECMAScript6入门--Class对象
2017/04/27 Javascript
基于BootStrap的前端分页带省略号和上下页效果
2017/05/18 Javascript
nodejs结合socket.io实现websocket通信功能的方法
2018/01/12 NodeJs
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
JavaScript命名空间模式实例详解
2019/06/20 Javascript
Layui数据表格之单元格编辑方式
2019/10/26 Javascript
从零学python系列之新版本导入httplib模块报ImportError解决方案
2014/05/23 Python
简单谈谈python中的语句和语法
2017/08/10 Python
Tesserocr库的正确安装方式
2018/10/19 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
Python编译成.so文件进行加密后调用的实现
2019/12/23 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
瑞典最大的儿童用品网上商店:pinkorblue.se
2021/03/09 全球购物
信息科学与技术专业求职信范文
2014/02/20 职场文书
护士节策划方案
2014/05/19 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
满月酒邀请函
2015/01/30 职场文书
OpenFeign实现远程调用
2022/08/14 Java/Android
Nginx如何配置多个服务域名解析共用80端口详解
2022/09/23 Servers