我的老师写了一种算法来查找数组中的数字。我试图将其转换为找到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
数组中的最后一个字母,它会中断。
答案 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);