EDIT:改善されたコードが含まれています。変更されたバイナリ検索配列
現在のロジックが正しくありません。私は、整数 "wantToFind"を見つけるバイナリ検索をしたい、それが見つかるまで、配列にないなら、1からwantToFindを引きます。
これは、配列の最初の項目が最も低い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"を見つけるバイナリ検索をしたい、それが見つかるまで、配列にないなら、1からwantToFindを引きます。このコードは現在動作しません。明快さの欠如のためのお詫び –
あなたのコードは正しく動作しません...そして?あなたは私たちにあなたのためにそれをデバッグし、理由を説明してほしいですか? –