第三章实践报告

  1. 实践题目:7-1
  2. 问题描述:使用二分查找算法在n个非降序排列的整数中查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
  3. 算法描述:将n个元素分成个数大致相同的两半,取a[mid]与x比较。如果x=a[mid],则找到x,算法终止;如果x<a[mid],则只在数组a的左半部继续查找x,如果x>a[mid],则只在a的右半部继续搜索x。同时,在while语句里加一个b统计比较次数。
  4. 代码实现:
    #include<iostream>
    using namespace std;
    int BinarySearch(int a[],int left,int right,int x,int &b){
        while (left<=right){
            b++int middle =(left+right)/2;
            if (x==a[middle]){
                return middle;
            }
            if(x>a[middle]){
                left=middle+1;
            }
            else {
                right =middle-1;
            } 
        }
        return -1;
    }
    int main(){
        int n,x,b=0;
        cin>>n;
        int a[1000];
        for (int i=0;i<n;i++){
            cin>>a[i];
        }
        cin>>x;
        int index=BinarySearch(a,0,n-1,x,b);
        cout<<index<<endl<<b;
    }

    5.时间复杂度和空间复杂度:用了二分法搜索算法,寻找x的时间复杂度为O(logn);空间复杂度为数组空间大小,是一个常数,与变量n的取值无关。所以空间复杂度为O(1)

    6.心得体会

    这道题目其实在掌握了书上的二分搜索算法后就变得很简单

posted @ 2018-12-02 19:43  jiaqiz  阅读(140)  评论(0编辑  收藏  举报