Java 如何获得二进制搜索算法的通用版本来查找列表中的元素
我的搜索方法有问题Java 如何获得二进制搜索算法的通用版本来查找列表中的元素,java,binary-search,Java,Binary Search,我的搜索方法有问题 public int search(T element) { int start = 0; int end = elements.length - 1; while (start <= end) { int middle = ((start + end) / 2); int result = element.compareTo(elements[middle]);
public int search(T element)
{
int start = 0;
int end = elements.length - 1;
while (start <= end)
{
int middle = ((start + end) / 2);
int result = element.compareTo(elements[middle]);
if (result < 0)
{
start = middle - 1;
}
else if (result > 0)
{
end = middle + 1;
}
else
{
return middle;
}
}
return -1;
}
我尝试了各种不同的方法,并查看了许多示例,但仍然无法正常工作
下面是课堂:
class GenericBinarySearchTree<T extends Comparable<T>>
{
private T[] elements;
/*
**Constructs an empty tree.
*/
public GenericBinarySearchTree(T[] names)
{
elements = names;
}
public int search(T element)
{
int start = 0;
int end = elements.length - 1;
while (start <= end)
{
int middle = ((start + end) / 2);
int result = element.compareTo(elements[middle]);
if (result < 0)
{
end = middle - 1;
}
else if (result > 0)
{
start = middle + 1;
}
else
{
return middle;
}
}
return -1;
}
类GenericBinarySearchTree
{
私有T[]元素;
/*
**构造一个空树。
*/
公共GenericBinarySearchTree(T[]名称)
{
元素=名称;
}
公共整数搜索(T元素)
{
int start=0;
int end=elements.length-1;
while(从0开始)
{
开始=中间+1;
}
其他的
{
返回中间;
}
}
返回-1;
}
}您的列表需要排序才能使用二进制搜索我不熟悉
GenericBinarySearchTree
。这是你已经(或已经)提供给你的课程吗?如果是这样,请同时发布代码。你实际上没有树,所以不要这样调用你的类。此外,“generic”是一个糟糕的名称片段。最好只使用BinarySearch
。另外,如果search
是您唯一的方法,只需使用static
方法并传入数组即可。您还需要首先对数组进行排序。最后,不需要声明泛型类型,因为您不需要对其执行任何操作—只需使用通配符即可
Vermont is the #7 element in the list!
Kentucky is the #-1 element in the list!
----jGRASP: operation complete.
class GenericBinarySearchTree<T extends Comparable<T>>
{
private T[] elements;
/*
**Constructs an empty tree.
*/
public GenericBinarySearchTree(T[] names)
{
elements = names;
}
public int search(T element)
{
int start = 0;
int end = elements.length - 1;
while (start <= end)
{
int middle = ((start + end) / 2);
int result = element.compareTo(elements[middle]);
if (result < 0)
{
end = middle - 1;
}
else if (result > 0)
{
start = middle + 1;
}
else
{
return middle;
}
}
return -1;
}