16
作者:
xxdmd8
,
2024-12-20 09:40:25
,
所有人可见
,
阅读 7
折半查找
【问题描述】给定非递减整数关键字序列,采用折半查找算法查找给定的关键字,如果查找成功依次输出比较的关键字值,如果查找失败输出0。
【输入形式】
输入非递减整数关键字序列,数值之间以空格分隔,回车结束。
输入要查找的关键字。
【输出形式】
如果查找成功,依次输出比较的关键字值。
如果查找失败,输出0。
【样例输入】
5 16 20 27 30 36 44 55 60 67 71
27
【样例输出】
36 20 27
【样例输入】
5 16 20 27 30 36 44 55 60 67 71
65
【样例输出】
0
#include<iostream>
#include<cstdio>
using namespace std;
const int N = 100;
int cnt[N];
int i;
int binsearch(int key,int list[],int low,int up){
if(low > up) return 0;
int mid = (low + up) / 2;
if(key < list[mid]){
cnt[i ++] = list[mid];
return binsearch(key, list, low, mid - 1);
}
else if(key > list[mid]){
cnt[i ++] = list[mid];
return binsearch(key, list, mid + 1, up);
}
else return mid + 1;
}
int main(){
int list[N];
char ch = '\0';
int j = 0;
for(j = 0;ch != '\n';j ++){
scanf("%d%c",&list[j],&ch);
}
int key;
scanf("%d",&key);
if(binsearch(key, list, 0,j - 1)){
for(int k = 0;k < i;k ++) cout << cnt[k] << " ";
cout << key << endl;
}else cout << 0 << endl;
return 0;
}