算法第二章上机实践报告


1.题目:

输入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
2.问题描述:用二分查找 在一个数组中找一个数
3.算法描述:二分法查找,没退出循环前都要比较次数+1。
int BinarySearch(int *a, int n,int m){
    int low = 0; int high = n-1;
    int compare = 0;
    while(low<=high){
        int mid = (low+high)/2;
            compare++;
        if(m==a[mid]){
            cout<<mid<<endl;
            return compare;
        }
        else if(m>a[mid]){
            low = mid+1;
        }
        else{
            high = mid-1;
        }   
        
    }
    cout<<-1<<endl;
    return compare;
}

4.算法时间复杂度及空间复杂度
运用了二分法,把规模为n每次都减少一半左右,即o(logN),
空间复杂度为o(1)
5.心得体会(对本次实践收获及疑惑进行总结)
这个二分查找的算法中间出过几次bug,与代码不精简
1.没有return 导致死循环

 

 2.compare++写在每一个if中,代码冗杂

 

 

posted @ 2019-09-20 19:06  Kayee1802  阅读(132)  评论(0编辑  收藏  举报