PTA基础编程题目集 6-13 折半查找

作者  王群芳

单位  合肥师范学院

给一个严格递增数列,函数int Search_Bin(SSTable T, KeyType k)用来二分地查找k在数列中的位置。

函数接口定义:

int Search_Bin(SSTable T, KeyType k) 
其中T是有序表,k是查找的值。  

裁判测试程序样例:

#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 ()
{ 
SSTable T;
KeyType k; 
Create(T);
 cin>>k; 
int pos=Search_Bin(T,k);
if(pos==0) 
 cout<<"NOT FOUND"<<endl;
else
 cout<<pos<<endl; 
return 0;
 }
 /* 请在这里填写答案 */ 

###输入格式:

第一行输入一个整数n,表示有序表的元素个数,接下来一行n个数字,依次为表内元素值。 然后输入一个要查找的值。

###输出格式: 

输出这个值在表内的位置,如果没有找到,输出"NOT FOUND"。

输入样例:

5
1 3 5 7 9
7

输出样例:

4

输入样例:

5
1 3 5 7 9
10

输出样例:

NOT FOUND

代码长度限制                        16 KB

 时间限制                      400 ms

内存限制                       6

代码部分(解答):

int Search_Bin(SSTable T, KeyType k) {
    int low=1, high=T.length;
    while(low <= high) {
        int mid = (low+high)/2;
        if(T.R[mid].key == k)
            return mid;
        else if(k < T.R[mid].key)
            high = mid-1;
        else
            low = mid+1;
    }
    return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学编程!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值