设有一整型查找表,利用二分查找法查找指定的关键字。 假设给出的查找表不确定是否排序,要求查找前,对查找表进行排序。 【输入形式】 输入若干组数据,每组数据包括: (1)输入整数n,表示查找表长度为n(n小于1000); (2)输入n个整数; (3)输入查找关键字key。 【输出形式】 若找到,输出关键字的位置序号(排序后的位置)及查找次数; 若未找到,输出“no”及查找次数。
时间: 2024-03-12 20:48:32 浏览: 20
好的,我会尽力回答。这是一个二分查找的问题,需要先对输入的整数序列进行排序,然后再进行查找。下面是对应的代码实现,您可以参考。
```
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, key, cnt = 0;
while (cin >> n) {
int a[1000];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
cin >> key;
sort(a, a + n); // 对数组进行排序
int left = 0, right = n - 1, mid;
bool found = false;
while (left <= right) {
mid = (left + right) / 2;
cnt++;
if (a[mid] == key) {
found = true;
break;
} else if (a[mid] > key) {
right = mid - 1;
} else {
left = mid + 1;
}
}
if (found) {
cout << mid << ' ' << cnt << endl;
} else {
cout << "no " << cnt << endl;
}
}
return 0;
}
```
输入格式为:
```
n a[0] a[1] ... a[n-1] key
```
其中n为整数序列的长度,a[i]表示整数序列的第i个元素,key为要查找的关键字。
输出格式为:
```
如果找到,输出关键字的位置序号(从0开始,排序后的位置)及查找次数;
如果未找到,输出“no”及查找次数。
```
其中查找次数指的是在查找过程中比较关键字的次数。