算法第二章实践报告

实践题目:二分查找

问题描述:

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

算法描述:

       伪代码如下:

       while (左边界left <= 右边界right) {

              middle = (left + right) / 2;

              if (要查找的值 == a数组middle位置的值) {

                     直接输出middle以及搜索次数;

                     终止进程;  //已找到该值,可直接结束程序

              }

              if (要查找的值 > a数组middle位置的值) {  //即值在middle的右侧

                     搜索范围改成middle右侧;

                     搜索次数+1;

              }

              if (要查找的值 < a数组middle位置的值) {  //即值在middle的左侧

                     搜索范围改成middle左侧;

                     搜索次数+1;

              }

       }

       输出-1和比较次数;  //因为直到循环结束也未找到该值,可知数组不存在该值

算法时间及空间复杂度分析:

       此程序只执行了一次while循环,且每次循环搜索范围为上一次的一半,且循环内时间复杂度为O(1),因此最坏情况下算法时间复杂度为O(log n)。

       此程序使用辅助空间存储了上界、下界、中间位置以及比较次数,因此空间复杂度为O(1)。

心得体会:

       通过改写二分搜索的算法,使我巩固二分搜索思想的同时,也提高了算法改写的水平。

posted @ 2018-10-14 11:05  wanderlust  阅读(112)  评论(0编辑  收藏  举报