Description |
利用折半查找算法,输出关键字比较次数。 例如:有序表(9 12 28 34 62 54)中查找12,利用折半查找3次找到,因此输出3;否则若找不到,输出0。 输入:第一行为关键字数,第二行为待查关键字,第三行为关键字序列。 |
Sample Input |
6 12 9 12 28 34 62 54 |
Sample Output |
3 |
Hint |
输出有换行 |
#include <bits/stdc++.h>
using namespace std;
typedef struct
{ // 可定义多种不同类型的数据类型
int key;
int info; // 其他数据类型的权值
} Elem;
typedef struct
{
Elem *R; // 数组表基址一般下标为0不存值
int len; // 长度
} Stable;
void initST(Stable &ST)
{ // 线性初始化
ST.R = new Elem[100];
}
void creat_ST(Stable &ST, int n)
{ // 创建线性数组
ST.len = n;
for (int i = 1; i <= ST.len; i++)
{
cin >> ST.R[i].key;
}
}
int serch_bin(Stable ST, int key)
{ // 二分查找(前提是有序)
int low = 1, cnt = 0;
int high = ST.len;
while (low <= high)
{
cnt++;
int mid = (low + high) / 2;
// cout << mid;
if (ST.R[mid].key == key)
{
return cnt;
}
else if (ST.R[mid].key < key)
{
low = mid + 1;
}
else if (ST.R[mid].key > key)
{
high = mid - 1;
}
}
return 0; // 0就是没找到
}
int main()
{
Stable ST;
initST(ST);
int n, key;
cin >> n;
cin >> key;
creat_ST(ST, n);
cout << serch_bin(ST, key) << "\n";
return 0;
}