![](/img/trans.png)
[英]How to use binary search on unsorted array with key and value in java?
[英]How to use binary search when the array has odd value?
我正在使用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
在兩種情況下我如何都能獲得正確的輸出?
二進制搜索僅適用於排序數組
解決方案:添加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;
}
在執行二進制搜索操作之前,必須對數組進行排序。
在您的問題中,您無法搜索奇數數組長度。
在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')); } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.