算法第二章上机实践报告

1.实践题目

  二分查找

2.问题描述

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

3.算法描述

  代码的核心部分:

while(left <= right){
        mid = (left + right) / 2;
        cnt++;
        if(a[mid] == x) break;
        else if(a[mid] < x){
            left = mid + 1;
        }
        else right = mid - 1;
    }

  二分查找的理解即为:取一段数列的中点,如果中点恰好为该数字则退出;

  若中点比查找的数x小,则在数列的右端查找(left = mid + 1),否则在数列的左端查找;

  不断重复,直到查找到x,若不存在,则返回-1及比较次数。

4.算法时间及空间复杂度分析

  二分查找也可称为折半查找,即不断取n个元素数组的中点,剩余元素从n/2到n/2^k不断减少;

  到最后查找到的情况下,n/2^k=1,即可得k=logn,时间度复杂度为O(logn);

  至于空间复杂度的求解本人不太熟练,在百度结果后得到,求空间复杂度的过程比较复杂,简单算法的空间复杂度一般为O(1)。

5.实验课的个人感想

  感觉结对编程的合作方式非常好,在解决算法问题的时候不再有单打独斗的感觉,有问题可以大家一起解决。

 

posted @ 2018-10-21 12:57  豪哥的博客  阅读(116)  评论(0编辑  收藏  举报