簡體   English   中英

數字字符串的二進制搜索數組未找到值

[英]Binary Search array of number strings not finding values

我知道有大量的二進制搜索示例,但是例如,當我有一個已排序的編號字符串數組時,我很難讓任何示例工作。

const sortedStringNumbers = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"];

當我將它插入這樣的二進制搜索函數時:

function bsearch (Arr,value){
        var low  = 0 , high = Arr.length -1 ,mid ;      
        while (low <= high){
            mid = Math.floor((low+high)/2);     
            if(Arr[mid]==value) return true; 
            else if (Arr[mid]<value) low = mid+1;
            else high = mid-1;          
        }
        return -1 ;
    }

當我運行時:

bsearch(sortedStringNumbers, '3')

它返回-1

當我運行時:

bsearch(sortedStringNumbers, '26)

它返回真;

最后,我根本不轉換二進制搜索輸入數組的原因是我需要將此函數用於兩種排序數組,上述類型和其他包含單詞的數組,例如: const sortedWordsArray = ['Algebra', 'Biology', 'Chemistry', ...]

二進制搜索數組確實適用於單詞數組,順便說一句。

檢查以確保您的數組已排序。

當你進行比較時

Arr[mid]<value

或者

Arr[mid]==value

它們被作為字符串而不是數字值進行比較。

如果您希望它在“兩種”場景中都能正常工作,正如您所建議的那樣,您可以嘗試這樣的操作

function bsearch (Arr,value){
        var low  = 0 , high = Arr.length -1 ,mid ;      
        while (low <= high){
            mid = Math.floor((low+high)/2);     

            var int_val = Arr[mid];
            if (!isNaN(Arr[mid])) {
                int_val = parseInt(Arr[mid]);
            }

            if(int_val==value) { 
                return true; 
            }
            else if (int_val<value) {
                low = mid+1;
            }
            else {
                high = mid-1;          
            }
        }
        return -1 ;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM