如何通过二进制搜索获取数组中的最后一个字符

时间:2019-06-12 10:45:59

标签: java arrays recursion

我的老师写了一种算法来查找数组中的数字。我试图将其转换为找到char

如果我搜索数组的第一个char,它会起作用,但是如果我尝试在同一数组中找到最后一个char,它会给我0或一个意外的数字(例如100+ ,当数组像4个char时)。

代码如下:

int myIndex = binarySearch(sentence , word[0], 0, sentence.length -1);

char [] sentence = {'s','t','a','c','k','o','v','e','r','f','l','o','w'};
char [] word = {'o','v','e','r'};

static int binarySearch(char [] arr, char x, int l, int r){
    if(r<l){
        return 0;
    }

    int m = l+(r-l)/2;
    if(arr[m] == x){
        return m;
    }
    if(arr[m] < x){
        return binarySearch(arr, x, m+1, r);
    }
    return binarySearch(arr, x, l, m-1);
}

如果我搜索word数组中的第一个字母,它可以正常工作,但是如果我搜索word数组中的最后一个字母,它会中断。

5 个答案:

答案 0 :(得分:1)

您正在对未排序的chars输入数组arr使用二进制搜索。因此,您必须首先对数组进行排序,或者对未排序的数组进行线性搜索。

答案 1 :(得分:0)

您需要具有排序的数组才能进行二进制搜索。

为此,

在调用搜索方法之前添加此行:Arrays.sort(sentence);

答案 2 :(得分:0)

您正在使用的二进制搜索仅适用于排序数组,除此之外,您的代码是正确的

您应该首先对数组进行排序,如下所示: (通过导入Java数组)

import java.util.Arrays; 

Arrays.sort(array_of_chars); 

答案 3 :(得分:0)

这无需排序数组即可工作。 您可以尝试一下吗,

 int myIndex = binarySearch(sentence , 'w');



 static int binarySearch(char[] arr, char x) 
     { 
         int l = 0, r = arr.length - 1; 
         while (l <= r) { 
             int m = l + (r - l) / 2; 

             int res = String.valueOf(x).compareTo(String.valueOf(arr[m])); 

             // Check if x is present at mid 
             if (res == 0) 
                 return m; 

             // If x greater, ignore left half 
             if (res > 0) 
                 l = m + 1; 

             // If x is smaller, ignore right half 
             else
                 r = m - 1; 
         } 

         return -1; 
     } 

答案 4 :(得分:0)

为使二进制搜索起作用,请先阵列进行排序。

//import utility class
import java.util.Arrays;

//Make use of sort function to sort the array
Arrays.sort(sentence);

//Call binary search now
int myIndex = binarySearch(sentence , word[0], 0, sentence.length -1);