我为get索引创建了名为getIndex
的函数,我从数组中搜索。
当我更改while (1)
而非while (max < min)
时,该循环正在运行,但条件(while (max < min)
)则返回-1。但是如果data
数组中没有搜索,我需要检查条件。为什么它会在条件下返回-1?
// assume my array looks-like this.
var data = [1, 2, 3, 4, 5, 7, 8, 9, 10];
function getIndex(search, arr) {
var min, max, guess, count;
min = 0;
max = arr.length - 1;
count = 0;
// If my search is not present in array. Return -1.
while (max < min) {
count++;
guess = Math.floor((min + max) / 2);
if (arr[guess] === search) {
return guess;
} else if (arr[guess] < search) {
min = guess + 1;
} else {
max = guess - 1;
}
}
return -1;
}
getIndex(8, data); // return -1
答案 0 :(得分:1)
将while条件更改为while(max>min)
答案 1 :(得分:1)
你在这里犯了错误。你正在检查Max是否小于或小于等于以及循环你将min值设置为0并且最大值设置为数组长度。那么Max怎么样小于分钟?由于条件为假,因此不进入循环是正确的。你需要&#34; min小于max&#34;或者&#34; Max大于min&#34; (两者都有相同的用途),然后才能正常工作。
答案 2 :(得分:1)
在while条件下更改max和min之间的操作
// assume my array looks-like this.
var data = [1, 2, 3, 4, 5, 7, 8, 9, 10];
debugger;
function getIndex(search, arr) {
var min, max, guess, count;
min = 0;
max = arr.length - 1;
count = 0;
// If my search is not present in array. Return -1.
while (max > min) {
count++;
guess = Math.floor((min + max) / 2);
if (arr[guess] === search) {
return guess;
} else if (arr[guess] < search) {
min = guess + 1;
} else {
max = guess - 1;
}
}
return -1;
}
getIndex(8, data); // return -1
答案 3 :(得分:0)
你可以使用for循环,更容易理解
// assume my array looks-like this.
var data = [1, 2, 3, 4, 5, 7, 8, 9, 10];
function getIndex(search, arr) {
var guess = -1;
// If my search is not present in array. Return -1.
for(var i=0;i<arr.length;i++){
if(arr[i]===search)guess = i;
}
return guess;
}
console.log(getIndex(8, data)); // return -1
&#13;