Java 如何实现字符串数组的二进制搜索?
我做了一些研究,没有找到任何东西,但如果这是一个重复,请让我知道 我有一个整数二进制搜索的代码Java 如何实现字符串数组的二进制搜索?,java,algorithm,binary-search,Java,Algorithm,Binary Search,我做了一些研究,没有找到任何东西,但如果这是一个重复,请让我知道 我有一个整数二进制搜索的代码 package thepac; public class CustomBS{ public static void main(String[] args){ int[] listOfNumbers = new int[]{2,45,65,76,89,100,342,455}; int numberToSearch = 100; int lowestIndex = 0;
package thepac;
public class CustomBS{
public static void main(String[] args){
int[] listOfNumbers = new int[]{2,45,65,76,89,100,342,455};
int numberToSearch = 100;
int lowestIndex = 0;
int highestIndex = listOfNumbers.length-1;
int middleIndex;
while(lowestIndex<=highestIndex){
middleIndex = (lowestIndex+highestIndex)/2;
if(numberToSearch > listOfNumbers[middleIndex]){
lowestIndex = middleIndex+1;
}else if(numberToSearch < listOfNumbers[middleIndex]){
highestIndex = middleIndex-1;
}else{
break;
}
}//end of while
if(lowestIndex > highestIndex){
System.out.println("not found");
}else{
System.out.println("found");
}
}
}
pac包装;
公共类海关{
公共静态void main(字符串[]args){
int[]listofNumber=新的int[]{2,45,65,76,89100342455};
整数搜索=100;
int-lowestinex=0;
int highestIndex=ListofNumber.length-1;
int中间索引;
while(lowestinex列表编号[middleIndex]){
Lowestinex=middleIndex+1;
}else if(numberToSearch上限指数){
System.out.println(“未找到”);
}否则{
System.out.println(“找到”);
}
}
}
这项工作只是发现和我理解的概念。是否可以实现一个版本的搜索字符串作为字符串数组
我想不出如何实现这一点,因为当前的算法检查被搜索的数字是否高于或低于中间索引,但是如果它是一个字符串,我如何检查它是否高于或低于另一个字符串
我知道我可以使用String.compareTo()方法来检查一个字符串是否比另一个字符串大或短,但我不确定这是否是正确的实现方法 如果有两个字符串
s1
和s2
,则
s1.compareTo(s2)
如果s1
在字典上小于s2
,则返回负结果;如果s1
在字典上大于s2
,则返回正结果;如果它们相等,则返回0
因此,您可以这样编写函数:
public static void main(String[] args){
String[] listOfStrings = new String[]{"a","b","c","d","g","h","k","z"};
String stringToFind = "d";
int lowestIndex = 0;
int highestIndex = listOfStrings.length-1;
int middleIndex = 0;
while(lowestIndex<=highestIndex){
middleIndex = (lowestIndex+highestIndex)/2;
if(stringToFind.compareTo(listOfStrings[middleIndex]) > 0){
lowestIndex = middleIndex+1;
}else if(stringToFind.compareTo(listOfStrings[middleIndex]) < 0){
highestIndex = middleIndex - 1;
}else{
break;
}
}//end of while
if(lowestIndex > highestIndex){
System.out.println("not found");
}else{
System.out.println("found at " + middleIndex);
}
}
publicstaticvoidmain(字符串[]args){
字符串[]listOfStrings=新字符串[]{“a”、“b”、“c”、“d”、“g”、“h”、“k”、“z”};
字符串stringToFind=“d”;
int-lowestinex=0;
int highestIndex=listOfStrings.length-1;
指数=0;
while(下限指数0){
Lowestinex=middleIndex+1;
}else if(stringToFind.compareTo(listofstring[middleIndex])<0){
highestIndex=middleIndex-1;
}否则{
打破
}
}//结束
如果(下限指数>上限指数){
System.out.println(“未找到”);
}否则{
System.out.println(“位于”+middleIndex);
}
}
如果有两个字符串s1
和s2
,则
s1.compareTo(s2)
如果s1
在字典上小于s2
,则返回负结果;如果s1
在字典上大于s2
,则返回正结果;如果它们相等,则返回0
因此,您可以这样编写函数:
public static void main(String[] args){
String[] listOfStrings = new String[]{"a","b","c","d","g","h","k","z"};
String stringToFind = "d";
int lowestIndex = 0;
int highestIndex = listOfStrings.length-1;
int middleIndex = 0;
while(lowestIndex<=highestIndex){
middleIndex = (lowestIndex+highestIndex)/2;
if(stringToFind.compareTo(listOfStrings[middleIndex]) > 0){
lowestIndex = middleIndex+1;
}else if(stringToFind.compareTo(listOfStrings[middleIndex]) < 0){
highestIndex = middleIndex - 1;
}else{
break;
}
}//end of while
if(lowestIndex > highestIndex){
System.out.println("not found");
}else{
System.out.println("found at " + middleIndex);
}
}
publicstaticvoidmain(字符串[]args){
字符串[]listOfStrings=新字符串[]{“a”、“b”、“c”、“d”、“g”、“h”、“k”、“z”};
字符串stringToFind=“d”;
int-lowestinex=0;
int highestIndex=listOfStrings.length-1;
指数=0;
while(下限指数0){
Lowestinex=middleIndex+1;
}else if(stringToFind.compareTo(listofstring[middleIndex])<0){
highestIndex=middleIndex-1;
}否则{
打破
}
}//结束
如果(下限指数>上限指数){
System.out.println(“未找到”);
}否则{
System.out.println(“位于”+middleIndex);
}
}
你的意思是。。。喜欢吗?谢谢-我熟悉这个方法,但我想实现我自己的算法,对字符串进行二进制搜索。我看不到你建议的方法的内部实现。是的,如果你想编写自己的实现,你可以使用String.compareTo()
method。你能举个例子说明如何在这种实现中使用它吗?@pgonzaleznetwork java API的代码是开源的。您应该能够在path/to/JDK/src.zip
下查找它。你可以找到一些例子,,…你的意思是。。。喜欢吗?谢谢-我熟悉这个方法,但我想实现我自己的算法,对字符串进行二进制搜索。我看不到你建议的方法的内部实现。是的,如果你想编写自己的实现,你可以使用String.compareTo()
method。你能举个例子说明如何在这种实现中使用它吗?@pgonzaleznetwork java API的代码是开源的。您应该能够在path/to/JDK/src.zip
下查找它。你可以找到一些例子,。。。