2017-08-11 3 views
1

これはjavascriptでバイナリ検索のコードを書くときの文です。 I don t know whatエラー誰かがこれをソートできる場合。あなたのアサーションはすべて合格しましたか?

 var doSearch = function(array, targetValue) { 
     var min = 0; 
    var max = array.length - 1; 
    var guess; 
    while(min <= max) 
    { 
     guess = Math.floor((min+max)/2); 
     if(array[guess] === targetValue) 
     { 
     return guess; 
     } 
     else if(guess < targetValue) 
     { 
     min = guess + 1; 
     } 
     else 
     { 
     max = guess - 1; 
     } 
    } 
    return -1; 
}; 

var primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 
     41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]; 

var result = doSearch(primes, 73); 
println("Found prime at index " + result); 

Program.assertEqual(doSearch(素数、73)、20)。 //この行でエラーが発生すると、インデックス20はリターンで20と比較されるため、問題は何かを知ることはできませんが、それでもまだ駄目です!

+0

に対するインデックスが行う、値をチェックする必要はありません、あなたのアサーションのすべてが合格しますか?この行はこのコードの後に​​発生します –

答えて

1

あなたはtargetValue

} else if (array[guess] < targetValue) { 
//   ^^^^^^^^^^^^ 

var doSearch = function(array, targetValue) { 
 
    var min = 0, 
 
     max = array.length - 1, 
 
     guess; 
 

 
    while (min <= max) { 
 
     guess = Math.floor((min + max)/2); 
 
     if (array[guess] === targetValue) { 
 
      return guess; 
 
     } 
 
     // no need for else, because return terminates the function 
 
     if (array[guess] < targetValue) { // use the item, not the index 
 
      min = guess + 1; 
 
     } else { 
 
      max = guess - 1; 
 
     } 
 
    } 
 
    return -1; 
 
}; 
 

 
var primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 
 
    41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97 
 
]; 
 

 
console.log(doSearch(primes, 73));

+0

ありがとうございます –

関連する問題