4-13 折半查找 (15分)

来源:互联网 发布:360卸载找不到软件 编辑:程序博客网 时间:2024/06/05 14:49

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 mid;int i = 1,j = T.len;//i指向一行数据的第一个,j指向一行数据的最后一个 while(i<j){mid = (i+j)/2;//折半查找 if(T.data[mid].key == k){return mid;} if (T.data[mid].key>k){//大于了 上限j就变化 j = mid -1;} if(T.data[mid].key < k){//小于了下限就变化 i = mid +1;}}return 0;}


原创粉丝点击