wahoowa wahoowa - 1 month ago 18
Javascript Question

Binary search using a while statement

I'm almost embarrassed to ask this question but for whatever reason I cannot get this to work. It's a Khan Academy exercise on binary searches. https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/p/challenge-binary-search

Any help would be greatly appreciated! Thanks!

EDIT: I should edit this to say that the error message I'm getting from Khan Academy is "It looks like you almost have the correct condition on the while loop, but something is still wrong with it." It's not incredibly helpful.



/* 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) {
var min = 0;
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;
}
}
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(primes, 73), 20);




Answer

Change this:

while(max > min)

to

while(max >= min)
Comments