我有一个数组
Values array: 12 20 32 40 52
^ ^ ^ ^ ^
0 1 2 3 4
我必须在其上执行二进制搜索以找到数字所在范围的索引。例如:
- 给定数字 -> 19(它位于索引 0 和 1 之间),返回 0
- 给定数字 -> 22(位于索引 1 和 2 之间),返回 1
- 给定数字 -> 40(位于索引 3 和 4 之间),返回 3
我以以下方式实现了二进制搜索,这对于案例 1 和 3 是正确的,但如果我们搜索案例 2 或 52、55 32 等则不正确。
#include <iostream>
using namespace std;
int findIndex(int values[], int number, unsigned first, unsigned last)
{
unsigned midPoint;
while(first<last)
{
unsigned midPoint = (first+last)/2;
if (number <= values[midPoint])
last = midPoint -1;
else if (number > values[midPoint])
first = midPoint + 1;
}
return midPoint;
}
int main()
{
int a[] = {12, 20, 32, 40, 52};
unsigned i = findIndex(a, 55, 0, 4);
cout << i;
}
bool found
不允许使用其他变量,例如。