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 类与静态类的实现(续)
Apr 02 Javascript
基于jquery的滑动样例代码
Nov 20 Javascript
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
Oct 17 Javascript
JS中三目运算符和if else的区别分析与示例
Nov 21 Javascript
javascript字符串循环匹配实例分析
Jul 17 Javascript
js中跨域方法原理详解
Jul 19 Javascript
javascript中substring()、substr()、slice()的区别
Aug 30 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
Sep 09 Javascript
jQuery插件实现适用于移动端的地址选择器
Feb 18 Javascript
vue.js 上传图片实例代码
Jun 22 Javascript
Vue实现移动端页面切换效果【推荐】
Nov 13 Javascript
JavaScript 扩展运算符用法实例小结【基于ES6】
Jun 17 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
农民C键的运用技巧
2020/03/04 星际争霸
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
2010/04/28 PHP
PHP几个数学计算的内部函数学习整理
2011/08/06 PHP
php mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
PHP的switch判断语句的“高级”用法详解
2014/10/01 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
2018/05/29 PHP
jQuery 中使用JSON的实现代码
2011/12/01 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
js用拖动滑块来控制图片大小的方法
2015/02/27 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
2015/09/09 Javascript
js密码强度校验
2015/11/10 Javascript
跟我学习javascript的var预解析与函数声明提升
2015/11/16 Javascript
JS数组去掉重复数据只保留一条的实现代码
2016/08/11 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
对layui中表单元素的使用详解
2018/08/15 Javascript
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
vue3.0 自适应不同分辨率电脑的操作
2021/02/06 Vue.js
python回调函数用法实例分析
2015/05/09 Python
python爬取NUS-WIDE数据库图片
2016/10/05 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
python算法题 链表反转详解
2019/07/02 Python
python 画图 图例自由定义方式
2020/04/17 Python
django中ImageField的使用详解
2020/12/21 Python
HTML5 FileReader对象的具体使用方法
2020/05/22 HTML / CSS
英国排名第一的最新设计师品牌手表独立零售商:TIC Watches
2016/09/24 全球购物
国际领先的学术出版商:Springer
2017/01/11 全球购物
就业协议书的作用
2014/04/11 职场文书
超市促销活动总结
2014/07/01 职场文书
十佳少先队员演讲稿
2014/09/12 职场文书
生产实习心得体会范文
2016/01/22 职场文书
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python