2016-10-31 7 views
0

Я почти смущен, чтобы задать этот вопрос, но по какой-то причине я не могу заставить это работать. Это упражнение Академии Хана по бинарным поискам. https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/p/challenge-binary-searchДвоичный поиск с использованием оператора while

Любая помощь была бы принята с благодарностью! Благодаря!

EDIT: Я должен отредактировать это, чтобы сказать, что сообщение об ошибке, которое я получаю от Академии Хан: «Похоже, что у вас почти правильное условие для цикла while, но с ним все еще не так». Это не невероятно полезно.

/* Returns either the index of the location in the array, 
 
    or -1 if the array did not contain the targetValue */ 
 
var doSearch = function(array, targetValue) { 
 
\t var min = 0; 
 
\t var max = array.length - 1; 
 
    var guess; 
 
    while(max > min) { 
 
     guess = Math.floor((max+min)/2); 
 
     if(array[guess] === targetValue) { 
 
      return guess; 
 
     } else if (array[guess] < targetValue) { 
 
      min = guess + 1; 
 
     } else { 
 
      max = guess - 1; 
 
     } 
 
    } 
 
\t return -1; 
 
}; 
 

 
var primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 
 
\t \t 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(primes, 73), 20);

+0

@Liam Спасибо, я только что заметил этот ответ, но не в моем первоначальном поиске по какой-то причине. Я просто упускал из виду, чтобы максимальное или минимальное значение было минимальным как мое условие. Должен ли я удалить этот вопрос? – wahoowa

+0

У вас должна быть возможность отметить это как дубликат в верхней части этого квеста (желтая полоса). Если вы считаете, что это дубликат, вы можете щелкнуть опцию в этом – Liam

ответ

4

Изменить это:

while(max > min) 

в

while(max >= min) 

 Смежные вопросы

  • Нет связанных вопросов^_^