我正在使用binarySearch
并且它对具有偶数索引的数组运行良好,但是当数组具有奇数索引(长度)时,它会给出错误的结果。
我做了什么这样的票价:
public static int binarySearch(int[] list, int key) {
int low = 0;
int high = list.length - 1;
while (high >= low) {
int mid = (low + high) / 2;
if (key < list[mid])
high = mid - 1;
else if (key == list[mid])
return mid;
else
low = mid + 1;
}
return - 1;
}
输入:
int[] arr1 = {5, 6, 8, 9, 11, 12, 11, 50, 1, 3, 15, 121, 33, 16, 17, 18, 19};
int[] arr2 = {5, 6, 8, 9, 11, 12, 11, 50, 1, 3, 15, 121, 33, 16, 17, 18};
案例:
System.out.println(binarySearch(arr1, 12));
System.out.println(binarySearch(arr2, 12));
输出:
-1
5
在这两种情况下我怎样才能得到正确的出局?
答案 0 :(得分:1)
在进行二进制搜索操作之前,必须对数组进行排序。
在您的问题中,您无法搜索奇数阵列长度。
在java中很容易。
您可以使用以下代码。
import java.util.Arrays;
class BS
{
public static void main(String args[])
{
int[] arr1 = {5, 6, 8, 9, 11, 12, 11, 50, 1, 3, 15, 121, 33, 16, 17, 18, 19};
System.out.println(Arrays.binarySearch(arr1 , '12'));
}
}
&#13;
答案 1 :(得分:1)
二进制搜索仅适用于已排序的数组
解决方案:添加Arrays.sort(list)
public static int binarySearch(int[] list, int key) {
Arrays.sort(list);
int low = 0;
int high = list.length - 1;
while (high >= low) {
int mid = (low + high) / 2;
if (key < list[mid]) high = mid - 1;
else if (key == list[mid]) return mid;
else low = mid + 1;
} return - 1;
}