javascript 二分法(數(shù)組array)
更新時(shí)間:2010年04月24日 19:38:00 作者:
擴(kuò)展Array對(duì)象,為其添加二分法查找功能,提高查找效率。
在Javascript中,我們可以通過(guò)prototype關(guān)鍵字為對(duì)象添加新的屬性或者是方法,下面是一個(gè)為Array對(duì)象添加二分法查找功能的方法:
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);
}
//如下為測(cè)試代碼:
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();
}
下面是國(guó)外的代碼
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(調(diào)整查找范圍)
if (value < items[middle]){
stopIndex = middle - 1;
} else if (value > items[middle]){
startIndex = middle + 1;
}
//recalculate middle(重新計(jì)算中項(xiàng)索引)
middle = Math.floor((stopIndex + startIndex)/2);
}
//make sure it's the right value(確保返回正確的值)
return (items[middle] != value) ? -1 : middle;
}
復(fù)制代碼 代碼如下:
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);
}
//如下為測(cè)試代碼:
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();
}
下面是國(guó)外的代碼
javascript二分法 //Copyright 2009 Nicholas C. Zakas. All rights reserved.
//MIT-Licensed, see source file
復(fù)制代碼 代碼如下:
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(調(diào)整查找范圍)
if (value < items[middle]){
stopIndex = middle - 1;
} else if (value > items[middle]){
startIndex = middle + 1;
}
//recalculate middle(重新計(jì)算中項(xiàng)索引)
middle = Math.floor((stopIndex + startIndex)/2);
}
//make sure it's the right value(確保返回正確的值)
return (items[middle] != value) ? -1 : middle;
}
相關(guān)文章
判斷數(shù)組是否包含某個(gè)元素的js函數(shù)實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇判斷數(shù)組是否包含某個(gè)元素的js函數(shù)實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05在TypeScript項(xiàng)目中搭配Axios封裝后端接口調(diào)用
這篇文章主要介紹了在TypeScript項(xiàng)目中搭配Axios封裝后端接口調(diào)用,本文記錄一下在?TypeScript?項(xiàng)目里封裝?axios?的過(guò)程,之前在開(kāi)發(fā)?StarBlog-Admin?的時(shí)候已經(jīng)做了一次封裝,不過(guò)那時(shí)是JavaScript跟TypeScript還是有些區(qū)別的,需要的朋友可以參考下2024-01-01[JS源碼]超長(zhǎng)文章自動(dòng)分頁(yè)(客戶端版)
[JS源碼]超長(zhǎng)文章自動(dòng)分頁(yè)(客戶端版)...2007-01-01JS實(shí)現(xiàn)遍歷不規(guī)則多維數(shù)組的方法
這篇文章主要介紹了JS實(shí)現(xiàn)遍歷不規(guī)則多維數(shù)組的方法,涉及javascript數(shù)組遞歸遍歷相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2018-03-03