以下是代碼,我的目標是在main函式中定義一個vector,然后輸入vector中的一個值,然后用二分法實作查找這個值的位置,但是我的二分法函式明明寫了return mid;仍然不回傳值,運行結果如下

感謝幫助!
#include <iostream>
#include<vector>
using namespace std;
int binary_find(int low,int high, vector<int> array_v,int in)
{
int mid;
while (low <= high)
{
mid = (low+high) / 2;
if (in < array_v[mid])
{
high = mid - 1;
cout << "high = mid-1 mid = "<<mid<<"\n";
cout << "high: " << high;
cout << "low: " << low;
}
else if (in > array_v[mid])
{
low = mid + 1;
cout << "low = mid+1 mid = "<<mid<<"\n";
cout << "high: " << high;
cout << "low: " << low;
}
} return mid;
}
void array_print(const vector<int> array_v)
{
int ix = 0;
for (; ix < array_v.size(); ix++)
{
cout << array_v[ix] << " ";
}
}
int main()
{
int array[] = { 2,32,45,64,621,820,830,840,900,999 };
vector<int> array_v(array, array + 10);
array_print(array_v);
cout << "please input number\n";
int in;
cin >> in;
int out;
out = binary_find(0, 9, array_v, in);
cout << "sequence = " << out;
return 0;
}
uj5u.com熱心網友回復:
將while的判定條件去掉等于,可以正常運行。uj5u.com熱心網友回復:
無限回圈吧執行到最后一步 low = 9, high = 9, 然后兩個if都不進 就沒變化
也沒判斷是否相等,
也不退出回圈 ,
另外 以代碼格式貼進來,保留縮進 代碼好看一些.
uj5u.com熱心網友回復:
int binary_find(int low, int high, vector<int> array_v, int in){
int mid;
while (low <= high)
{
mid = (low + high) / 2;
if (in < array_v[mid])
{
high = mid - 1;
cout << "high = mid-1 mid = " << mid << "\n";
cout << "high: " << high;
cout << "low: " << low;
}
else if (in > array_v[mid])
{
low = mid + 1;
cout << "low = mid+1 mid = " << mid << "\n";
cout << "high: " << high;
cout << "low: " << low;
}
else
{
return mid;
}
}
return mid;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/195651.html
標籤:C++ 語言
上一篇:哪個地方錯了!
下一篇:時間超限
