你能用javascript在字符串数组中进行二进制搜索吗

Can you do binary search in array of strings in javascript

本文关键字:二进制 搜索 数组 javascript 字符串      更新时间:2023-09-26

我正在试着做一个单词查找的事情。问题有成千上万的单词。这将是很好的:

只搜索第一个字母,索引0处的字符,在数组中,获取关键字/值的索引,具有和搜索的关键字/值,索引1处的字符等。

如果可能的话我不想做什么。。。

转到array[i],获取其全部值,然后在索引0处找到char,然后说是或不是这样。这种方式胜过一切。如果我正在访问整个字符串,为什么不在访问时评估整个字符串呢?

也许我需要以不同的方式重组数组。所以主数组会像"var a=[a,b,c,…]然后a[a]=[a、b、c、d,e,…],依此类推,最后a[i][r][p][l][a][n][e]…"。。。也许这样更有效率。如果我不能访问数组中值的唯一第一个字符,而不首先了解整个内容(而不是分析),那么这可能是唯一可能的方法。

我认为你可以做到。你只需要对字符串数组进行排序,也许你可以将它们与字符值进行比较,例如A的65。

我还没有测试过,但这似乎是合法的:http://www.dweebd.com/javascript/binary-search-an-array-in-javascript/

也许我不明白你想做什么,但如果你能保持单词列表的排序,那么二进制搜索是最快、最有效的方法:

function binarySearch(list, key) {
    let indexLow = 0;
    let indexHigh = list.length - 1;
    while (indexLow <= indexHigh) {
        const mid = Math.floor((indexLow + indexHigh) / 2)
        const x = list[mid]
        if (x === key) {
            return mid;
        }
        if (x > key) {
            indexHigh = mid - 1;
        } else {
            indexLow = mid + 1;
        }
    }
    return -1;
}