做题时只提交核心函数的代码即可
// 核心函数
int Search_Bin(SSTable table, KeyType key)
{
int left = 1;
int right = table.length;
int mid = 0;
while (left <= right)
{
mid = (right + left) / 2;
if (key == table.R[mid].key)
{
return mid;
}
if (key < table.R[mid].key)
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
return 0;
}
给一个严格递增数列,函数int Search_Bin(SSTable T, KeyType k)
用来二分地查找k
在数列中的位置。
函数接口定义:
int Search_Bin(SSTable T, KeyType k)
其中T
是有序表,k
是查找的值。
输入格式:
第一行输入一个整数n,表示有序表的元素个数,接下来一行n个数字,依次为表内元素值。 然后输入一个要查找的值。
输出格式:
输出这个值在表内的位置,如果没有找到,输出"NOT FOUND"。
完整的可执行代码(可以直接在本地编译并运行):
#include <iostream>
using namespace std;
#define MAXSIZE 50
typedef int KeyType;
typedef struct
{
KeyType key;
} ElemType;
typedef struct
{
ElemType *R;
int length;
} SSTable;
void Create(SSTable &T)
{
int i;
T.R = new ElemType[MAXSIZE + 1];
cin >> T.length;
for (i = 1; i <= T.length; i++)
cin >> T.R[i].key;
}
int Search_Bin(SSTable T, KeyType k);
int main(void)
{
SSTable T;
KeyType k;
Create(T);
cin >> k;
int pos = Search_Bin(T, k);
if (0 == pos)
{
cout << "NOT FOUND" << endl;
}
else
{
cout << pos << endl;
}
return 0;
}
int Search_Bin(SSTable table, KeyType key)
{
int left = 1;
int right = table.length;
int mid = 0;
while (left <= right)
{
mid = (right + left) / 2;
if (key == table.R[mid].key)
{
return mid;
}
if (key < table.R[mid].key)
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
return 0;
}
输入样例1:
5
1 3 5 7 9
7
输出样例1:
4
输入样例2:
5
1 3 5 7 9
10
输出样例2:
NOT FOUND