改写二分搜索算法
2017-12-17 12:34
218 查看
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
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
相关文章推荐
- 改写二分搜索算法
- 2-3 改写二分搜索算法
- 算法:改写二分搜索算法
- 搜索算法--二分查找(python)
- 二分搜索算法
- 代码之美中的二分搜索算法--Java版
- 搜索算法--线性搜索、二分搜索、内插搜索、剪枝搜索
- 实验1:二分搜索算法
- 二分搜索算法(折半查找)原理以及递归(recuition),迭代(iteration)的两种实现源代码
- 小白笔记-------------------二分搜索算法(再刷一遍)
- 二分搜索算法和分治算法的简单实例
- 搜索算法-二分搜索(折半查找)
- 二分搜索算法
- 二分搜索算法和快速排序算法
- 二分搜索算法
- Java分治法与二分搜索算法实例分析
- 二分搜索算法(递归和非递归实现)
- 二分搜索算法(折半查找)原理以及递归(recuition),迭代(iteration)的两种实现源代码
- 搜索算法-二分搜索-方程解问题(problem 1001)
- [整理]二分查找搜索算法原理及递归,迭代方法实现