【发布时间】:2018-10-01 10:59:52
【问题描述】:
我制作了一个长度为 10 的数组。每个插槽都有一个名称。我的目标是随机选择一个名称并进行二进制搜索以找到它。我不明白它有什么问题,但如果你至少能给我一个提示,那将非常有帮助,谢谢。 这是我的代码:
private int iRecursiveCalls = 0;
public void runRecursiveTest(){
String[] iArraySize = new String[10];
String[] aiNumbers = new String[iArraySize.length];
SecureRandom oRand = new SecureRandom();
iArraySize[0] = "John";
iArraySize[1] = "Max";
iArraySize[2] = "Kyle";
iArraySize[3] = "Sam";
iArraySize[4] = "Robert";
iArraySize[5] = "Alex";
iArraySize[6] = "Bob";
iArraySize[7] = "Daniel";
iArraySize[8] = "Felix";
iArraySize[9] = "Michael";
String iTarget = aiNumbers[oRand.nextInt(iArraySize.length)];
Arrays.sort(aiNumbers);
System.out.println("Target num: " + iTarget);
System.out.println("--- Begin Binary Search ---");
long lBegTime = System.nanoTime();
findNumbersBinarySearch(aiNumbers, iTarget, 0, iArraySize.length -1);
long lEndTime = System.nanoTime();
System.out.println("Elapsed time: " + (lEndTime - lBegTime));
System.out.println("Recursive calls: " + iRecursiveCalls);
System.out.println("--- End Binary Search ---");
}
private int findNumbersBinarySearch(String[] aiNumbers, String iTarget,
int iLow, int iHigh){
iRecursiveCalls++;
int iMiddle = (iHigh + iLow) / 2;
if(iTarget.equals(aiNumbers[iMiddle])){
return iMiddle;
}
else if(iTarget.compareTo(aiNumbers[iMiddle])>0){
return findNumbersBinarySearch(aiNumbers, iTarget,
iMiddle + 1, iHigh);
}
else{
return findNumbersBinarySearch(aiNumbers, iTarget,
iLow, iMiddle - 1);
}
}
}
我能做些什么来解决它?
【问题讨论】:
-
欢迎来到 SO!你有基本情况吗?您的递归如何知道何时停止?
-
请使用代码格式化选项格式化代码。
-
找到单词时
-
我不明白你为什么不想处理这个问题,但是好的。除此之外,您还在调用者中对空数组进行排序和索引。
-
你为什么破坏了你的问题?
标签: java binary-search