如何解决二进制搜索不起作用错误的“第一个”和“最后一个”
public class Programma {
public static void main(String args[]) {
int array[] = { 1,2,4,5,6,7,8 };
int v = 4;
int first = 0;
int last = 6;
if (binary_search(array,v,first,last) == 1) {
System.out.println("Value " + v + " found!");
} else {
System.out.println("Value " + v + " not found.");
}
}
static int binary_search(int array[],int v,int first,int last) {
if (first > last) {
return 0;
}
int m = (first + last) / 2;
System.out.println("Actual m is: " + m + " of " + first + last);
if (array[m] == v) {
return 1;
} else if (v > array[m]) {
binary_search(array,m + 1,last);
} else {
binary_search(array,m - 1);
}
return -1;
}
}
输出为:
Actual m is: 3 of 06
Actual m is: 1 of 02
Actual m is: 2 of 22
Value 4 not found.
我真的不明白为什么first
和last
从06变为02,为什么应该变成46,因为3小于4。...我加了条件{ {1}}应该可以完成工作,但实际上不可以。
解决方法
您忘记检索binary_search
的结果:
if (array[m] == v)
return 1;
if (v > array[m])
return binary_search(array,v,m + 1,last);
return binary_search(array,first,m - 1);
我认为您可以简化代码并选择主要binary_search
方法来接受array
和必需的value
:
public static void main(String... args) {
int[] arr = { 1,2,4,5,6,7,8 };
int val = 4;
int pos = binarySearch(arr,val);
if (pos == -1)
System.out.format("Value %s was not found.\n",val);
else
System.out.format("Value %d was found at position %d\n",val,pos);
}
public static int binarySearch(int[] arr,int val) {
return binarySearch(arr,arr.length - 1);
}
private static int binarySearch(int[] arr,int val,int left,int right) {
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == val)
return mid;
if (arr[mid] < val)
left = mid + 1;
else if (arr[mid] > val)
right = mid - 1;
}
return -1;
}
,
如果您正在寻找解决方案而非研究目的,则可以使用为其创建的方法。
import java.util.Arrays;
public static void main(String[] args)
{
int intArr[] = {10,20,15,22,35};
int intKey = 22;
Arrays.sort(intArr);
System.out.println(intKey + " found at index = " + Arrays.binarySearch(intArr,intKey));
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。