Java数组二进制搜索
好的,伙计们,这是我的一段简单代码,我构建了一个字符串数组,并尝试在该数组中搜索字符串:Java数组二进制搜索,java,arrays,binary-search,Java,Arrays,Binary Search,好的,伙计们,这是我的一段简单代码,我构建了一个字符串数组,并尝试在该数组中搜索字符串: String[] arr = new String[5]; arr[0] = "ccc"; arr[1] = "aaa"; arr[2] = "bbb"; arr[3] = "eee"; arr[4] = "ddd"; System.out.println(Arrays.binarySearch(arr,"eee")); 直接取自Java6BinarySearch文档:“在进行此调用之前,必须对数组进行
String[] arr = new String[5];
arr[0] = "ccc";
arr[1] = "aaa";
arr[2] = "bbb";
arr[3] = "eee";
arr[4] = "ddd";
System.out.println(Arrays.binarySearch(arr,"eee"));
直接取自Java6BinarySearch文档:“在进行此调用之前,必须对数组进行排序。如果未排序,则结果未定义”
实际上,我运行了几次代码,得到的输出总是3,这是eee在未排序数组中的位置,但正如文档所说,结果似乎不是“未定义的”
我错过了什么
谢谢您遗漏了“结果未定义”包括“正确”答案的可能性,如本例所示
如果您将arr[1]更改为“eee”,您将看到不同的结果。未定义“并不意味着“肯定会给您错误的结果”,或“肯定会崩溃”。许多机构、书籍、教授定义的二进制搜索。。。等要求元素以字母或数字的方式排序
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String[] arr = new String[6];
arr[0] = "ccc";
arr[1] = "aaa";
arr[2] = "bbb";
arr[3] = "eee";
arr[4] = "ddd";
arr[5] = "aaa";
System.out.println(Arrays.toString(arr));
System.out.println("\"eee\" was found at index: " + Arrays.binarySearch(arr, "eee"));
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
System.out.println("\"eee\" was found at index: " + Arrays.binarySearch(arr, "eee"));
}
}
除了esej的答案之外,下面是对您的程序的修改,它返回了错误的答案:
public class Main {
public static void main(String[] args) {
String[] arr = new String[6];
arr[0] = "ccc";
arr[1] = "aaa";
arr[2] = "bbb";
arr[3] = "eee";
arr[4] = "ddd";
arr[5] = "aaa";
System.out.println(Arrays.binarySearch(arr, "eee"));
}
}
当我们谈论一段代码将如何运行时,术语“未定义”意味着程序执行可以执行以下任一操作:
- 返回错误的答案
- 永远循环
- 立即崩溃
- 损坏某些数据并在很久以后导致崩溃
- 执行其他非预期操作(例如,擦除硬盘驱动器)
- 幸运的话,返回正确的答案
- 输入二进制搜索,first=0,last=4,middle=2比较
- 带“eee”的数组[中间](“bbb”第一个=2+1;中间=3
- 将数组[middle]与“eee”=>“found”进行比较;返回3