Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 确定元素是否在排序数组中的最快方法_Javascript_Arrays_Sorted - Fatal编程技术网

Javascript 确定元素是否在排序数组中的最快方法

Javascript 确定元素是否在排序数组中的最快方法,javascript,arrays,sorted,Javascript,Arrays,Sorted,我有一个包含1000个或更多值的排序整数数组(最多可达5000+)。我需要编写一个函数,该函数接收int并根据数组中的元素返回bool。我知道我可以编写一个带中断的for循环,我知道我可以使用jquery.InArray 在知道数组已排序的情况下,实现这一点的最佳方法是什么 谢谢。知道数组已排序,二进制搜索将是最好的方法。如果数组已排序,则答案已排序-使用二进制切块。我想您应该使用二进制搜索例程。二进制搜索例程是,而线性搜索平均是 有许多变体可供选择。我在这里找到了一个: 函数二进制搜索(项、值

我有一个包含1000个或更多值的排序整数数组(最多可达5000+)。我需要编写一个函数,该函数接收int并根据数组中的元素返回bool。我知道我可以编写一个带中断的for循环,我知道我可以使用jquery.InArray

在知道数组已排序的情况下,实现这一点的最佳方法是什么


谢谢。

知道数组已排序,二进制搜索将是最好的方法。

如果数组已排序,则答案已排序-使用二进制切块。

我想您应该使用二进制搜索例程。二进制搜索例程是,而线性搜索平均是

有许多变体可供选择。我在这里找到了一个:

函数二进制搜索(项、值){
var startIndex=0,
stopIndex=items.length-1,
中间=数学层((停止指数+开始指数)/2);
while(项目[中间]!=值和开始索引<停止索引){
//调整搜索区域
如果(值<项目[中间]){
停止指数=中间-1;
}else if(值>项目[中间]){
startIndex=中间+1;
}
//重新计算中间值
中间=数学层((停止指数+开始指数)/2);
}
//确保它是正确的值
返回(项目[中间]!=值)?-1:中间;
}
或者这个看起来更简单的版本,它有无数种不同语言的二进制搜索功能

function binary_search_iterative(a, value) {
    var lo = 0, hi = a.length - 1, mid;
    while (lo <= hi) {
        mid = Math.floor((lo+hi)/2);
        if (a[mid] > value)
            hi = mid - 1;
        else if (a[mid] < value)
            lo = mid + 1;
        else
            return mid;
    }
    return null;
}
函数二进制搜索迭代(a,值){
var lo=0,hi=a。长度-1,中间;
while(lo值)
hi=mid-1;
else if(a[mid]<值)
lo=中间+1;
其他的
中途返回;
}
返回null;
}
谷歌闭包中还有一个二进制搜索,包含代码


并且,对二进制搜索算法的工作原理进行了很好的描述。

许多语言已经实现了这一点,例如在java中,您可以只使用CollectionsCollections.binarySearch(列表>列表,T键)方法,我很确定C#也有某种二进制搜索方法。

如果进行多次查找,移植到类似贴图的对象

var fastLookup={};
forEach(函数(i){fastLookup[i]=true)});
//每次:
如果(fastLookup[key]==true){//do thing
}
function binary_search_iterative(a, value) {
    var lo = 0, hi = a.length - 1, mid;
    while (lo <= hi) {
        mid = Math.floor((lo+hi)/2);
        if (a[mid] > value)
            hi = mid - 1;
        else if (a[mid] < value)
            lo = mid + 1;
        else
            return mid;
    }
    return null;
}