簡體   English   中英

當數組具有奇數值時如何使用二進制搜索?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM