1. 实践题目:7-1 二分查找
  2. 问题描述:输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
  3. 算法描述:首先要明白二分查找的定义,将n个元素分成大致相等的两部分,然后用中值a[mid] 与需要查找的数x进行比较,如果a[mid]>x,则取整个数组的右半部分作为数组继续进行分割比较的操作,如果a[mid]<x,则取整个数组的左半部分作为数组继续进行分割比较。并且为了完成题目中求比较次数的要求,设置一个计数数值i++的操作来计算比较次数。
  4. 算法时间及空间复杂度分析(要有分析过程):①时间复杂度:对于我的算法时间复杂度应该是O(logn),搜索我要的数的最坏情况就是把每一个新数组都分割一遍才找到我要的数,所以应该是O(logn)②空间复杂度:O(1),二分法的辅助空间应该只需要一个,所以是O(1)

  5. 心得体会(对本次实践收获及疑惑进行总结):在实验课上,自己编写的代码里出现了bug,而bug的原因就是在确定新的left或者right的时候,没有让left=mid-1,而是直接left-=mid,这样的做法好像让数据出现了重复对比的情况,也会导致一些奇怪的错误,通过老师的指点我和搭档君然改正了这个编写上的错误。通过这次实验我能够有了不要让一个数重复对比的思想,也有了顾全代码大局的思想(代码不仅要简单,还要分行,写得清晰)

 

posted on 2018-10-14 23:08  Star^Bright  阅读(122)  评论(0编辑  收藏  举报