二进制搜索和重复
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
假设我们有一个数组 {–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