我正在尝试搜索已排序的数组以查找我选择的数字。如果数组包含此数字,我想返回每个匹配项的索引。我需要写方法来完成这项任务。一个递归,一个迭代。我已经开始了下面的递归方法。
public int findRecursive(T anEntry) {
return binarySearchRecursive(0, length - 1, anEntry);
}
private int binarySearchRecursive(int first, int last, T desiredItem)
{
int position = 0;
int mid = (first + last) / 2;
if (first > last || (desiredItem.compareTo(list[position]) != 0))
position = -(position + 1);
else if (desiredItem.equals(list[mid]))
position = mid;
else if (desiredItem.compareTo(list[mid]) < 0)
position = binarySearchRecursive(first, mid -1, desiredItem);
else
position = binarySearchRecursive(mid + 1, last, desiredItem);
return position;
}
这是应该预期的数组/输出
public static void main(String[] args) {
AList<Integer> testList = new AList<Integer>();
testList.add(1);
testList.add(3);
testList.add(2);
testList.add(5);
testList.add(7);
testList.add(2);
testList.add(4);
//* question 5
//* should output 1, -8, 4
// my out is returning -1, -1, -1
testList.sort();
System.out.println(testList.findRecursive(2));
System.out.println(testList.findRecursive(8));
System.out.println(testList.findRecursive(4));
System.out.println("");
答案 0 :(得分:1)
为了获得所需的输出,您的递归方法需要进行一些小的更改 -
private int binarySearchRecursive(int first, int last, T desiredItem)
{
int position = 0;
int mid = (first + last) / 2;
if (first > last)
position = -(last + 1);
else if (desiredItem.equals(list[mid]))
position = mid;
else if (desiredItem.compareTo(list[mid]) < 0)
position = binarySearchRecursive(first, mid -1, desiredItem);
else
position = binarySearchRecursive(mid + 1, last, desiredItem);
return position;
}
两项变更都在终止区域。当第一个&gt;最后你已经用尽了搜索,你不需要比较所需的项目。同样在终止时,您应该返回-(last+1)
,而不是-(position+1)
,因为位置始终为0.