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 相关文章推荐
学习YUI.Ext 第三天
Mar 10 Javascript
神奇的7个jQuery 3D插件整理
Jan 06 Javascript
javascript实现模拟时钟的方法
May 13 Javascript
举例讲解如何判断JavaScript中对象的类型
Apr 22 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
Apr 28 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
Feb 17 Javascript
浅谈gulp创建完整的项目流程
Dec 20 Javascript
使用vue自定义指令开发表单验证插件validate.js
May 23 Javascript
在Vue环境下利用worker运行interval计时器的步骤
Aug 01 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
Dec 09 Javascript
如何基于JS截获动态代码
Dec 25 Javascript
微信小程序:报错(in promise) MiniProgramError
Oct 30 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的单引号和双引号 字符串效率
2009/05/27 PHP
深入理解PHP变量的值类型和引用类型
2015/10/21 PHP
List Installed Software Features
2007/06/11 Javascript
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
2013/11/06 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
2013/11/21 Javascript
JS判断文本框内容改变事件的简单实例
2014/03/07 Javascript
Nodejs极简入门教程(一):模块机制
2014/10/25 NodeJs
jQuery中dequeue()方法用法实例
2014/12/29 Javascript
node模块机制与异步处理详解
2016/03/13 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
2016/07/27 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
2017/04/27 Javascript
浅谈Vue内置component组件的应用场景
2018/03/27 Javascript
JS实现分页导航效果
2020/02/19 Javascript
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
Python3控制路由器——使用requests重启极路由.py
2016/05/11 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
Python hashlib模块加密过程解析
2019/11/05 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
pycharm下pyqt4安装及环境配置的教程
2020/04/24 Python
python实现126邮箱发送邮件
2020/05/20 Python
Python如何批量生成和调用变量
2020/11/21 Python
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
教师评优事迹材料
2014/01/10 职场文书
运动会解说词50字
2014/01/18 职场文书
护士辞职信模板
2014/01/20 职场文书
运动会广播稿50字
2014/01/26 职场文书
红头文件任命书范本
2014/06/05 职场文书
房屋出租协议书范本(标准版)
2014/09/24 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书
python 下划线的多种应用场景总结
2021/05/12 Python