PAT基础题 4-13 折半查找

来源:互联网 发布:python numpy 编辑:程序博客网 时间:2024/05/21 13:46

给一个严格递增数列,函数int binSearch(SeqList T, KeyType k)用来二分地查找k在数列中的位置。
函数接口定义:
int binSearch(SeqList T, KeyType k)
其中T是有序表,k是查找的值。

裁判测试程序样例:#include <iostream>using namespace std;#define MAXLEN 50typedef int KeyType;typedef  struct                     { KeyType  key;                                             } elementType;  typedef  struct{ elementType   data[MAXLEN+1];   int   len;} SeqList;                      void creat(SeqList &L){ int i;  cin>>L.len;  for(i=1;i<=L.len;i++)     cin>>L.data[i].key;   }int  binSearch(SeqList T, KeyType k);int main () {  SeqList L;  KeyType k;   creat(L);   cin>>k;   int pos=binSearch(L,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

int  binSearch(SeqList T, KeyType k){    int Low,Mid,High;    Low=1;High=T.len;    while(Low<High)    {        Mid=(Low+High)/2;        if(T.data[Mid].key<k)        Low=Mid+1;        else        if(T.data[Mid].key>k)        High=Mid-1;        else         return Mid;    }    return 0;}