oj刷题--2852二分查找

来源:互联网 发布:h5打开淘宝app 编辑:程序博客网 时间:2024/06/05 09:36

2852: 二分查找

时间限制: 1 Sec  内存限制: 128 MB
提交: 215  解决: 79

题目描述

输入不多于20个升序排列的整数,以及一个待查找的数key,输出key在序列中的位置(从0开始计位序)。查找采用二分查找的方法进行,请将下面的程序补充完整。
#include <iostream>
using namespace std;
const int SIZE=20;
int binary_search(int arr[], int n, int k);
int main()
{
   int d[SIZE];
   int index, key, num=0;
   cin>>key;
   while(cin>>d[num])
      num++;
   index = binary_search(d, num, key);
   if(index >= 0)
     cout<<index<<endl;
   else
     cout<<"NO"<<endl;
   return 0;
}
//提交全部程序代码
int binary_search(int arr[], int n, int k)
{
   int i=-1;
   int low=_____(1)_____,high=_____(2)_____,mid;
   while(low<=high)
   {
     mid=______(3)________;
     if(arr[mid]==k)
     {
        i=mid;
        break;
     }
     else if(_____(4)_____)
        high=mid-1;
     else
      _______(5)__________;
  } 
  return i;
}

输入

先输入要查找的数
下一行输入升序排列的若干整数(不超过20个),以CTRL-Z结束

输出

若要查找的数在序列中,输出其在序列中的位置(从0开始计数),若不能找到,输出NO

样例输入

4523 36 45 76 81 88 89 91

样例输出

2

/*烟台大学计算机学院  2017作者:张威完成日期:2017年2月25日*/#include <iostream>using namespace std;const int SIZE=20;int binary_search(int arr[], int n, int k);int main(){   int d[SIZE];   int index, key, num=0;   cin>>key;   while(cin>>d[num])      num++;   index = binary_search(d, num, key);   if(index >= 0)     cout<<index<<endl;   else     cout<<"NO"<<endl;   return 0;}//提交全部程序代码int binary_search(int arr[], int n, int k){   int i=-1;   int low=0,high=n-1,mid;   while(low<=high)   {     mid=(high+low)/2;     if(arr[mid]==k)     {        i=mid;        break;     }     else if(arr[mid]>k)        high=mid-1;     else      low=mid+1;  }  return i;}

0 0