【原创】编程之美之二分搜索
2013-07-11 14:20
274 查看
二分搜索思想
给定一个有序(不降序)数组a, 求任意一个i使得a[i]等于v,不存在返回-1。二分搜索的思路是:选一个数组中间值m,将有序数组一分为二。如果a[m]==v,搜索结束;如果a[m]>v,搜索[left, m),反之搜索(m, right]。如图所示。
那么如果数组中没有v时,何时终止搜索呢?一个显而易见的条件是数组不能再进行划分搜索时,即left > right 。
[b]
@Test public void testBsMaxLess() { int[] a1 = { 1 }; Assert.assertEquals(-1, bsMaxIndexLessThanV(a1, 0, 0, 1)); Assert.assertEquals(0, bsMaxIndexLessThanV(a1, 0, 0, 2)); int[] a2 = { 1, 2 }; Assert.assertEquals(-1, bsMaxIndexLessThanV(a2, 0, 1, 1)); Assert.assertEquals(0, bsMaxIndexLessThanV(a2, 0, 1, 2)); Assert.assertEquals(1, bsMaxIndexLessThanV(a2, 0, 1, 3)); int[] a3 = new int[] { 2, 3, 3, 3, 3, 3, 3, 3, 4 }; Assert.assertEquals(-1, bsMaxIndexLessThanV(a3, 0, a3.length - 1, 2)); Assert.assertEquals(8, bsMaxIndexLessThanV(a3, 0, a3.length - 1, 10)); Assert.assertEquals(0, bsMaxIndexLessThanV(a3, 0, a3.length - 1, 3)); Assert.assertEquals(7, bsMaxIndexLessThanV(a3, 0, a3.length - 1, 4)); }
Test case
相关文章推荐
- [原创] - C#编程大幅提高OUTLOOK的邮件搜索能力!
- 【编程素质】算法-二分搜索
- 编程珠玑第五章习题五——C++实现二分搜索时进行错误检测
- [转]编程珠玑第五章二分搜索(折半查找)之java实现
- [原创] - C#编程大幅提高OUTLOOK的邮件搜索能力!
- [原创] - C#编程大幅提高OUTLOOK的邮件搜索能力!
- 天轰穿C# -vs2010 - 04面向对象的编程之属性【原创】
- 『原创』适合初学的简单3D碰撞检测初探(对于3D编程初学人员)
- poj 3273 Monthly Expense(二分搜索之最大化最小值)
- TopCoder-SRM635-DIV1-250pt-ShoppingSurveyDiv1-二分搜索
- 【HDU】 5101 Select 二分搜索 upper_bound
- HDU 2899(搜索题,二分)
- 程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大经典原创系列集锦与总结
- HDU 2446(搜索题,二分)
- 二分搜索最左位置
- hdu2141 二分搜索+数据处理
- POJ 3104 Drying (二分搜索)
- POJ 2533 最长上升子序列 [动态规划 + 二分搜索]
- 已成人形的产品垂直搜索之摸底分析[原创]
- POJ 3662 Telephone Lines (SPFA、二分搜索)