算法第二章实验报告

7-1 二分查找 (20 分)
 

输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。

输入格式:

输入共三行: 第一行是n值; 第二行是n个整数; 第三行是x值。

输出格式:

输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。

输入样例:

4
1 2 3 4
1

输出样例:

0
2

#算法:
#include<iostream>
using namespace std;
int main()
{
    int n,x;
    cin>>n;
    int a[n];
    for(int i=0;i<n;i++)
    {
      cin>>a[i];
    }
    cin>>x;
    int left=0;
    int right=n-1;
    int m=0;
    int j=0;
    while(left<=right)
    {
        m++;
        int middle=(left+right)/2;
        if(x==a[middle])
        {
            j++;
            cout<<middle<<endl<<m;
        }
        if(x>a[middle])
        {
        left=middle+1;
        }
        else
        {
            right=middle-1;
        }
    }
    if(j==0) cout<<"-1"<<endl<<m;
   return 0;
}
心得体会:
二分法搜索不断缩小搜索范围,用循环一直改变left、right和middle以及缩小范围。
 
 
posted @ 2019-09-23 19:07  方子禧  阅读(246)  评论(0编辑  收藏  举报