編輯:包括改進的代碼。修改的二進制搜索數組
我目前的邏輯不正確。我想要一個可以找到整數「wantToFind」的二分法搜索,如果它不在數組中,將從wantToFind中減1,直到找到它。
我已經從一個較大的程序中減去了這個值,這保證了數組中的第一項將是最低的wantToFind(我們希望找到的值)。
然而,儘管下面的二進制搜索公約的程序還是會被尋求更高的數字,如88
float list[15] = {60,62,64,65,67,69,71,72,74,76,77,79,81,83,84};
//binary search
int wantToFind = 88; //other tests are 65, 61, 55
bool itemFound = false;
int current = 0;
int low = 0;
int high = 14;
current = (low+high)/2;
//int previousCurrent = -1;
do {
do {
//if 61 < 72
if (wantToFind < list[current])
{
//smaller
//previousCurrent = current;
high = current - 1;
current = (low+high/2);
}
else if (wantToFind > list[current])
{
//bigger
//previousCurrent = current;
low = current + 1;
current = (low+high/2);
}
else{
if(wantToFind == list[current])
{
itemFound = true;
}
}
} while (low >= high);
if (itemFound == false)
{
wantToFind--;
}
} while (itemFound == false);
printf("\n%d", wantToFind); //which will be a number within the list?
return 0;
}
只是爲了確保我正確理解你 - 你已經拿到了你在某處找到的這段代碼,並且你要求我們向你解釋它是如何工作的?你自己做過什麼研究嗎?通過代碼讀取,用各種輸入調試它等?如果是,請分享。例如,你能夠了解哪些部分以及哪些部分無法理解? –
@barakmanos不完全。我想要一個可以找到整數「wantToFind」的二分法搜索,如果它不在數組中,將從wantToFind中減1,直到找到它。此代碼目前無法使用。對缺乏清晰度的道歉 –
因此,您的代碼無法正常工作...和?您希望我們爲您進行調試並解釋原因? –