java 中二分查找的实现
Implementation of binary search in java
我正在尝试在 Java 中实现二进制搜索。我正在处理最多 100 个素数数组。这是代码:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
binarySearch(new int[]{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97}, 29, 0, 24);
}
public static int binarySearch(int[] sortedArray, int key, int min, int max) {
int average = (min + max) / 2;
if (Arrays.asList(sortedArray).contains(key)) {
if (average == key) {
System.out.println("You have guessed the right number and it is: " + average);
return average;
} else if (key > average) {
System.out.println("Key is greater than average, going back to loop: " + average);
return binarySearch(sortedArray, key, average + 1, max);
} else {
System.out.println("Key is smaller than average, going back to loop : " + average);
return binarySearch(sortedArray, key, min, average - 1);
}
} else {
return -1;
}
}
我觉得可能是main
中对binarySearch
的调用有问题,但我不确定用什么方式可以实现。
您可以在
java.util.Collections#binarySearch(java.util.List extends java.lang.Comparable super T>>, T)
您的代码中存在两个主要问题(如果您 运行 使用调试器处理代码,您可以很容易地解决它们):
if (Arrays.asList(sortedArray).contains(key)) {
为什么需要这个?此方法的全部目的是搜索密钥,因此您不应调用此代码。此外,此代码不起作用,因为 Arrays.asList(sortedArray)
会 return 一个 List<int[]>
,NOT 一个 List<int>
,它永远不会包含键,所以这个表达式总是 return false.
您正在将键与列表中的索引进行比较,您应该将其与索引处的 元素 进行比较:
if (sortedArray[average] == key) {
还有
} else if (key > sortedArray[average]) {
我正在尝试在 Java 中实现二进制搜索。我正在处理最多 100 个素数数组。这是代码:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
binarySearch(new int[]{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97}, 29, 0, 24);
}
public static int binarySearch(int[] sortedArray, int key, int min, int max) {
int average = (min + max) / 2;
if (Arrays.asList(sortedArray).contains(key)) {
if (average == key) {
System.out.println("You have guessed the right number and it is: " + average);
return average;
} else if (key > average) {
System.out.println("Key is greater than average, going back to loop: " + average);
return binarySearch(sortedArray, key, average + 1, max);
} else {
System.out.println("Key is smaller than average, going back to loop : " + average);
return binarySearch(sortedArray, key, min, average - 1);
}
} else {
return -1;
}
}
我觉得可能是main
中对binarySearch
的调用有问题,但我不确定用什么方式可以实现。
您可以在 java.util.Collections#binarySearch(java.util.List extends java.lang.Comparable super T>>, T)
您的代码中存在两个主要问题(如果您 运行 使用调试器处理代码,您可以很容易地解决它们):
if (Arrays.asList(sortedArray).contains(key)) {
为什么需要这个?此方法的全部目的是搜索密钥,因此您不应调用此代码。此外,此代码不起作用,因为
Arrays.asList(sortedArray)
会 return 一个List<int[]>
,NOT 一个List<int>
,它永远不会包含键,所以这个表达式总是 return false.您正在将键与列表中的索引进行比较,您应该将其与索引处的 元素 进行比较:
if (sortedArray[average] == key) {
还有
} else if (key > sortedArray[average]) {