2017-09-08 3 views
1

JavaScriptでバイナリ検索を実装しようとしています。ターゲット要素のインデックスを返すことができますが、ターゲット値が配列に存在しないことを示すために、プログラムは-1を返していません。たとえば、[12、39、52、61、88、100]の配列があり、バイナリ検索関数にターゲット値 "200"を入力すると、 "-1"が返されませんこれを行うために私のelseステートメントを構造化したとしても、値は配列に存在しません。誰かが私が間違っていることを教えてもらえますか?前もって感謝します。バイナリ検索を実行するときに値が配列に存在しないことを正しく示す方法

マイコード:

function binarySearch(arr, target){ 
var start = 0; 
var end = arr.length - 1; 

while(start <= end){ 

    var mid = Math.floor((start + end)/2); 

    if(arr[mid] < target){ 
     start = mid + 1; 
    } 

    else if(arr[mid] === target){ 
     return mid; 
    } 

    else if(arr[mid] > target) { 
     end = mid - 1; 
    } 

    else { 
     return -1; 
     } 
    } 
    } 

var myArr = [12, 39, 52, 61, 88, 100]; 
binarySearch(myArr, 200); 
+0

返す-1関数の最後に書きます。 – Lalit

答えて

2

あなたはノーリターンがループ内で起きていない場合、あなた値はまだ発見されているいかなるので、whileループの外に-1の戻り値を移動しないでする必要があります。だから最後に-1を返してください。

最後のチェックでも、小さい値または等しい値をチェックした後に、左上が常に大きくなることを省略できます。

function binarySearch(arr, target) { 
 
    var start = 0, 
 
     end = arr.length - 1, 
 
     mid; 
 

 
    while (start <= end) { 
 
     mid = Math.floor((start + end)/2); 
 
     if (arr[mid] < target) { 
 
      start = mid + 1; 
 
      continue; 
 
     } 
 
     if (arr[mid] === target) { 
 
      return mid; 
 
     } 
 
     end = mid - 1; 
 
    } 
 
    return -1; 
 
} 
 

 
var myArr = [12, 39, 52, 61, 88, 100]; 
 

 
console.log(binarySearch(myArr, 200)); // -1 
 
console.log(binarySearch(myArr, 12)); // 0 
 
console.log(binarySearch(myArr, 39)); // 1 
 
console.log(binarySearch(myArr, 52)); // 2 
 
console.log(binarySearch(myArr, 61)); // 3 
 
console.log(binarySearch(myArr, 88)); // 4 
 
console.log(binarySearch(myArr, 100)); // 5

関連する問題