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 表单验证大全
Nov 23 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
Jul 23 Javascript
js propertychange和oninput事件
Sep 28 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
Mar 23 Javascript
JavaScript中值类型和引用类型的区别
Feb 23 Javascript
基于ExtJs在页面上window再调用Window的事件处理方法
Jul 26 Javascript
Javascript(es2016) import和require用法和区别详解
Aug 11 Javascript
antd Upload 文件上传的示例代码
Dec 14 Javascript
微信小程序位置授权处理方法
Jun 13 Javascript
原生JS实现无缝轮播图片
Jun 24 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
Oct 16 Javascript
vue实现滑动解锁功能
Mar 03 Vue.js
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
微信公众平台消息接口校验与消息接口响应实例
2014/12/23 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
PHP实现数据分页显示的简单实例
2016/05/26 PHP
理解JavaScript的caller,callee,call,apply
2009/04/28 Javascript
jQuery中removeClass()方法用法实例
2015/01/05 Javascript
JS简单实现点击复制链接的方法
2016/08/03 Javascript
jQuery插件ajaxFileUpload使用实例解析
2016/10/19 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
2016/12/30 Javascript
canvas绘制多边形
2017/02/24 Javascript
微信小程序 设置启动页面的两种方法
2017/03/09 Javascript
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
2018/03/25 jQuery
在vue项目中使用md5加密的方法
2018/09/14 Javascript
vue element 中的table动态渲染实现(动态表头)
2019/11/21 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
Python类属性与实例属性用法分析
2015/05/09 Python
Python高级用法总结
2018/05/26 Python
python库matplotlib绘制坐标图
2019/10/18 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
Python 如何实现访问者模式
2020/07/28 Python
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
《散步》教学反思
2014/03/02 职场文书
大班开学家长寄语
2014/04/04 职场文书
关于环保的建议书
2014/05/12 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
国际贸易实训报告
2014/11/05 职场文书
文员岗位职责范本
2015/04/16 职场文书
消防宣传语大全
2015/07/13 职场文书
服装店员工管理制度
2015/08/07 职场文书
2019公司管理制度
2019/04/19 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python