【发布时间】:2021-10-15 15:48:06
【问题描述】:
// function for binary search in array
#include <iostream>
using namespace std;
int binSrch(int arr[], int n, int key)
{
int s = 0, e = n; // s for starting and e for ending
int mid = (s + e) / 2;
while (s <= e)
{
if (arr[mid] == key)
return mid;
else if (arr[mid] > key)
e = mid - 1;
else
s = mid + 1;
}
return -1;
}
int main()
{
int n, key;
cout << "enter no. of elements" << endl;
cin >> n;
int arr[n];
cout << "enter array " << endl;
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
cout << "enter key" << endl;
cin >> key;
cout << binSrch(arr, n, key);
return 0;
}
此数组中的二进制搜索代码不起作用。
对于某些数组,程序会卡住。我不知道做错了什么。
我以排序格式输入。
PS C:\Users\anmol\Desktop\c++projectwork> g++ .\binSearchArrFun.cpp
PS C:\Users\anmol\Desktop\c++projectwork> ./a
enter no. of elements
6
enter array
2
3
4
5
6
7
enter key
8
它只是卡在这里而不是给-1
【问题讨论】:
-
与您的问题无关,但您应该知道
int arr[n];不是标准C++,您应该改用std::vector<int> arr(n);。 -
您需要在迭代中重新计算
mid。 -
如果这不是学校作业,请尝试使用
std::upper_bound或std::lower_bound。 -
不要在评论中解释
s和e是什么,而是给它们起个名字来说明它们是什么。start和end浮现在脑海中。
标签: c++ visual-studio binary-search