二进制搜索和重复

Binary Search and duplicates

假设我们有一个数组 {–2, 8, 13, 22, 25, 25, 38, 42, 51, 103}

第一次二分查找时,中间值是多少?

我自己的猜测是名为 25 的第二个值,因为只有这样搜索才知道它是相同的。

我相信它总是试图通过

找到中间点
(0+n)/2 = (0+9)/2 = 4(Integer)

你的情况。

因此,如果您想搜索 25 本身,根据您将在下限组中找到的算法,位置 4 首先作为匹配项。

中间值是前 25 个数字。

你的 binarySearch 第一次调用是这样的: binarySearch(a,1,a.length) ,其中 "a" 是你的数组。

你的数组长度是 10 ,所以 m = ((10-1) +1)/2 = 5 数组中的位置。

然后调用 binarySearch(1,m) 并将相同的方法应用于此数组(原始数组的前半部分) –2、8、13、22、25