改写二分搜索算法
来源:互联网 发布:网络意识形态实施方案 编辑:程序博客网 时间:2024/05/16 15:17
1. 实践题目
7-2 改写二分搜索算法
2. 问题描述
输出小于x的最大元素的最大下标i和大于x的最小元素的最小下标j。当搜索元素在数组中时,i和j相同。 提示:若x小于全部数值,则输出:-1 0 若x大于全部数值,则输出:n-1的值 n的值
3. 算法描述(不能粘贴程序)
在基本的二分查找里面做改进,满足题目要求。一开始我是对越底界,越高界,直接找得到,以及在两者之间四个情况分开来写,但是觉得这种方法不好。后来改进的话就直接对low和high两个指针进行操作。在二分循环while(low <= high ),当low==high 的时候,此时为直接找得到。当low>=high时,此时就是剩下来的三种情况(越底界,越高界,在两者之间):
当越底界时,low>high,此时不满足循环条件,low=-1,high=0,直接输出
当越高界时,low>high,此时不满足循环条件,low=arr.length+1,high = arr.length,直接输出
4. 算法时间及空间复杂度分析(要有分析过程)
二分查找的基本思想是将n个元素分成大致相等的两部分,去a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x。时间复杂度就是while循环的次数。所以时间复杂度可以表示O()=O(logn)。
空间复杂度O(1)。中间借用辅助空间来保存数据,表示所需空间为常量,并且与n无关。
5. 程序运行截图
6.心得体会(对本次实践收获及疑惑进行总结)
收获:觉得二分查找可以充分利用好头指针尾指针这两个要素,可以使代码变得更加精炼。不明白的点可以画图自己推下。此次用的是迭代的二分法,找相邻两个点的这个修改也可以重新调用一次二分法,充分利用好迭代的本质。
源代码地址:https://github.com/TFknight/PythonStudy/blob/master/algorithm/erfen.java
- 改写二分搜索算法
- 改写二分搜索算法
- 算法:改写二分搜索算法
- 【基础算法】搜索-二分搜索
- C#二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 简单算法--二分搜索
- 二分搜索算法细节
- 研究二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 泛型
- df,du命令
- 持久层、持久化、ORM
- 下一个手机AI浪潮——再见,苹果和他的时代!
- IO流(File对象-常见功能 38-IO流(File对象-常见功能-过滤器).1 2
- 改写二分搜索算法
- Windows 10 Development with XAML and C 7, 2nd Edition.pdf 2017 英文原版 免费下载
- 数据结构-线性相关代码
- 软件分享
- 【Python】主(main)函数的原理
- n个数的排序
- PHP 类与对象(重载)
- Oracle Incident Response and Forensics.pdf 2017 英文原版 免费下载
- 二叉树的基本操作