java - 如何实现字符串数组的二分查找?

标签 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;
    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");
    }
}
}

这只是找到并且我理解这个概念。是否可以实现一个在字符串数组中搜索字符串的版本?

我想不出如何实现这个,因为当前的算法检查正在搜索的数字是否高于或低于中间索引,但如果它是一个字符串,我如何检查它是否高于或低于另一个字符串?

我知道我可以使用 String.compareTo() 方法来检查一个字符串是否比另一个字符串更大或更短,但我不确定这是否是实现此目的的正确方法。

最佳答案

如果有两个字符串 s1s2

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);
    }
}

关于java - 如何实现字符串数组的二分查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37363002/

相关文章:

java - Java 二分查找

algorithm - 如何使用二分查找查找数组中的第一个非空元素?

java - ActionListener(actionPerformed) 返回一些东西?

java - (Neo4j非托管扩展API)为什么Neo4j中查询速度取决于数据集的大小?

java - 自动生成的 javascript jax-rs 客户端

验证网上步行益智游戏的算法

algorithm - 数组中的元素数大于给定数

java - 如何从 Arraylist 获取字符串?

找到最少的矩形以覆盖一组矩形而不重叠的算法

algorithm - 初级算法、中级算法和复杂/专家级算法的示例?