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.别无选择.

上一篇:剑指offer 45 把数组排成最小的数-toString()方法-StringBuilder动态增加字符数组-重写Comparator方法


下一篇:c – 使用std :: set find和struct data