描述
从小到大输入若干整数(不超过300),以-99999为结束符,然后再输入一个整数x,在前面的整数中用二分查找法查找x,若找到,显示数的下标(即从0开始的序号);若找不到,显示-1。注意,不应使用别人写的库函数。
输入
若干整数。
输出
一个下标。
输入输出示例
输入 | 输出 | |
示例 1 | | |
示例 2 | | |
#include <iostream>
using namespace std;
int binarySearch(int a[], int left, int right, int dest);
int main() {
int a[310];
int i = 0;
int num;
while (cin >> num && num != -99999)
a[i++] = num;
int dest;
cin >> dest;
int idx = binarySearch(a, 0, i - 1, dest);
cout << idx << endl;
return 0;
}
int binarySearch(int a[], int left, int right, int dest) {
while (left <= right) { //只要数组还没空
int midIdx = (left + right) / 2; //就取中间值比较
int mid = a[midIdx];
if (dest > mid) //中间值小了,说明目标数在右边,就把左端右移
left = midIdx + 1;
else if (dest < mid) //中间值大了,说明目标数在左边,就把右端左移
right = midIdx - 1;
else
return midIdx;//找到后就返回
}
return -1;
}
//二分查找必须是有序序列