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 相关文章推荐
让你的网站可编辑的实现js代码
Oct 19 Javascript
写入cookie的JavaScript代码库 cookieLibrary.js
Oct 24 Javascript
关于递归运算的顺序测试代码
Nov 30 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
Nov 01 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
Apr 30 Javascript
js过滤HTML标签完整实例
Nov 26 Javascript
JS根据生日月份和日期计算星座的简单实现方法
Nov 24 Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
Apr 13 Javascript
自定义事件解决重复请求BUG的问题
Jul 11 Javascript
详解Node.js利用node-git-server快速搭建git服务器
Sep 27 Javascript
详解使用webpack构建多页面应用
Dec 21 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
Feb 25 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
PHP5+UTF8多文件上传类
2008/10/17 PHP
php SQL之where语句生成器
2009/03/24 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
2013/05/07 PHP
php微信公众平台配置接口开发程序
2016/09/22 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
php ajax confirm 删除实例详解
2019/03/06 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
2019/05/29 PHP
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
JS实现FLASH幻灯片图片切换效果的方法
2015/03/04 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
2015/04/12 Javascript
JavaScript 经典实例日常收集整理(常用经典)
2016/03/30 Javascript
AngularJs  Creating Services详解及示例代码
2016/09/02 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
JS类的定义与使用方法深入探索
2016/11/26 Javascript
Swiper自定义分页器使用详解
2017/12/28 Javascript
在vscode中统一vue编码风格的方法
2018/02/22 Javascript
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
微信小程序全局变量改变监听的实现方法
2019/07/15 Javascript
Vue.js暴露方法给WebView的使用操作
2020/09/07 Javascript
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
用Python写冒泡排序代码
2016/04/12 Python
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
基于梯度爆炸的解决方法:clip gradient
2020/02/04 Python
Python使用进程Process模块管理资源
2020/03/05 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
YOOX美国官方网站:全球著名的多品牌时尚网络概念店
2016/09/11 全球购物
欧舒丹英国官网:购买欧舒丹护手霜等明星产品
2017/01/17 全球购物
过滤器的用法
2013/10/08 面试题
2019年朋友圈经典励志语录50条
2019/07/05 职场文书
Netty结合Protobuf进行编解码的方法
2021/06/26 Java/Android
Spring Boot mybatis-config 和 log4j 输出sql 日志的方式
2021/07/26 Java/Android
redis击穿 雪崩 穿透超详细解决方案梳理
2022/03/17 Redis
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL