算法第二章实践

1. 实践题目 

二分查找

2. 问题描述

输入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

3. 算法描述

将数组一份为二,若所查找的数等于中位数,则返回中位数;若所查找的数小于中位数,在左边区域进行二分查找;若所查找的数大于中位数,在右边区域继续进行二分查找。

4. 算法时间及空间复杂度分析(要有分析过程)

二分查找的区间大小是n,n/2,n/4,…,n/2^k(接下来操作元素的剩余个数),k是循环的次数。
最坏的情况是K次二分之后,每个区间的大小为1,找到想要的元素
令n/2^k=1,
可得k=log2n,(是以2为底,n的对数),所以时间复杂度可以表示O()=O(logn).

5. 心得体会(对本次实践收获及疑惑进行总结)

通过解这道题,我了解了二分查找的整个过程,学会了如何分析算法的时间复杂度,也可以写出程序,比以前有很大进步。

posted @ 2019-09-26 22:29  长夜85  阅读(160)  评论(0编辑  收藏  举报