您的位置:首页 > 编程语言

【原创】编程之美之二分搜索

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: