4-13 折半查找 (15分)

来源:互联网 发布:网络赌搏多少钱定罪 编辑:程序博客网 时间:2024/06/07 09:38

4-13 折半查找   (15分)

给一个严格递增数列,函数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"。

输入样例:

51 3 5 7 97

输出样例:

4

输入样例:

51 3 5 7 910

输出样例:

NOT FOUND
int  binSearch(SeqList T, KeyType k){int low=0,high=T.len-1,mid;while(low<=high){mid=(low+high)/2;if(T.data[mid].key==k)return mid;else if(T.data[mid].key>k)high=mid-1;elselow=mid+1;}return 0;}
int  binSearch(SeqList T, KeyType k){int low=0,high=T.len-1,mid;while(low<=high){mid=(low+high)/2;if(T.data[mid].key==k)return mid;else if(T.data[mid].key>k)high=mid-1;elselow=mid+1;}return 0;}
low=mid+1;}return 0;}

原创粉丝点击