java-使用比较器进行二进制搜索
作者:互联网
我正在努力使这个工作.我需要编写一个可与binarySearch算法一起使用的仿函数,以查找长度在12到15个单位之间的梯子.
这是二进制搜索:
public static <AnyType> int binarySearch(GenericSimpleArrayList<AnyType> a, AnyType x, Comparator<? super AnyType> cmp) {
int low = 0;
int high = a.size() - 1;
int mid;
while (low <= high) {
mid = (low + high) / 2;
if (cmp.compare(a.get(mid), x) < 0) {
low = mid + 1;
} else if (cmp.compare(a.get(mid), x) > 0) {
high = mid - 1;
} else {
return mid;
}
}
return NOT_FOUND; // NOT_FOUND = -1
}
这是我给函子的东西:
public class FindLadder implements Comparator<Ladder>{
@Override
public int compare(Ladder lhs, Ladder rhs) {
return 0;
}
}
现在很明显,函子目前不会做任何事情,我不知道要在函子中放置什么以确定阶梯是否落在x和x长度之间,也不知道如何实现binarySearch方法.据我所知,我需要将Ladder对象作为x传递,以使函子起作用,但是该如何规定要搜索的长度? Ladder类具有.length()方法.
数组按最短到最长的顺序排序.我根本无法更改binarySearch代码.我只能实现将执行我需要的功能的函子.
解决方法:
尝试这个:
public class FindLadder implements Comparator<Ladder>{
@Override
public int compare(Ladder lhs, Ladder rhs) {
if(lhs.length() < rhs.length() && lhs.length() > 12) // Suppose rhs.length() is 15
{
return 0;
}
if(lhs.length() < 12) {
return -1;
}
else {
return 1;
}
}
}
调用x = 15的binarySearch().例如LibraryComparator.binarySearch(l,new Ladder(15),new FindLadder());.
我用硬编码12.别无选择.
标签:comparator,functor,binary-search,java 来源: https://codeday.me/bug/20191119/2038946.html