Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何实现字符串数组的二进制搜索?_Java_Algorithm_Binary Search - Fatal编程技术网

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
下查找它。你可以找到一些例子,。。。