二分查找之应用篇
2013-05-21 16:52
190 查看
二分查找,又称折半查找。假设数组长度为N,则算法复杂度为O(log(n));
其优点是:比较次数少,查找速度快,平均性能好。
其缺点是:要求待查表为有序表,而且插入删除困难。
算法要求:必须采用顺序存储结构且关键字大小有序(升序、降序都可)。
算法原理:查找所要查找的元素时,首先与序列中间的元素进行比较,如果大于这个元素,就在当前序列的后半部分继续查找,如果小于这个元素,就在当前序列的前半部分继续查找,直到找到相同的元素,或者所查找的序列范围为空为止.
一下是百度面试的一道题,其中可以应用到二分查找的思想。
题目:有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现例如,数组{-20,-13,-4,
6, 77,200} ,绝对值最小的是-4。
算法实现的基本思路:
找到负数和正数的分界点,如果正好是0就是它了,如果是正数,再和左面相邻的负数绝对值比较,如果是负数,取取绝对值与右面正数比较。还要考虑数组只有正数或负数的情况。
其优点是:比较次数少,查找速度快,平均性能好。
其缺点是:要求待查表为有序表,而且插入删除困难。
算法要求:必须采用顺序存储结构且关键字大小有序(升序、降序都可)。
算法原理:查找所要查找的元素时,首先与序列中间的元素进行比较,如果大于这个元素,就在当前序列的后半部分继续查找,如果小于这个元素,就在当前序列的前半部分继续查找,直到找到相同的元素,或者所查找的序列范围为空为止.
int search4(int array[], int n, int v) { int left, right, middle; left = -1, right = n; while (left + 1 != right) { middle = left + (right - left) / 2; if (array[middle] < v) { left = middle; } else { right = middle; } } if (right >= n || array[right] != v) { right = -1; } return right; }
一下是百度面试的一道题,其中可以应用到二分查找的思想。
题目:有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现例如,数组{-20,-13,-4,
6, 77,200} ,绝对值最小的是-4。
算法实现的基本思路:
找到负数和正数的分界点,如果正好是0就是它了,如果是正数,再和左面相邻的负数绝对值比较,如果是负数,取取绝对值与右面正数比较。还要考虑数组只有正数或负数的情况。
相关文章推荐
- 二分查找算法的应用
- First Bad Version(二分查找的应用)
- (二分查找的应用)LeetCode#540. Single Element in a Sorted Array
- 二分查找的实现和应用汇总(转载)
- Spark中ip映射数据应用库,二分查找省份,将结果写入mysql
- 二分求解 三角形 stl的应用 涉及范围的二分查找可以先求上界再算下界,结果即上界减下界
- 二分查找及其应用
- 电缆分割问题(二分查找的应用)
- 【二分查找】在排序数组中,找出给定数字的出现次数 以及二分其他应用
- uva11991(二分查找或map的应用)
- 数组封装应用及有序数组、二分查找源码实现
- 二分算法的应用——不只是查找值!
- C++二分查找在搜索引擎多文档求交的应用分析
- 二分查找算法变体在实际项目中的应用
- java的String类和StringBuffer的应用 冒泡排序 选择元素 二分查找
- 华为中级机试题--二分查找树的应用
- 20、二分查找的实现与应用
- 二分法-二分查找的应用及三个经典例题
- 二分查找的应用
- 二分查找及其变化应用