簡體   English   中英

通過偶數遞增和奇數遞減的數組進行二進制搜索?

[英]Binary search through an array of even numbers increasing and odd numbers decreasing?

我知道我的代碼一團糟,對此我感到抱歉,我試圖盡快編寫它,而不是安排語句。

它適用於大多數情況,但不適用於{19,17,2,15,6,13,12,7,16,3,22}。

如您所見,它應該很簡單,可以以任何方式對數組進行排序,但是偶數始終從頭到尾增加,而奇數則減少。

我試圖做的是使用一些條件進行常規二進制搜索,以檢查我們查看的是偶數還是奇數,然后進行相應調整。

編輯:我忘了提這是我要解決的問題,他們說以最有效的方式專門搜索數組。

public static int find(int[] arr,int n)
{
    final boolean EVEN;

    if (n%2==0)
     EVEN = true;
    else
     EVEN = false;

    int min = 0, max = arr.length-1;
    int m = 0;
    do
    {
        m = (min+max)/2;

        if (n == arr[m])
         break;

        if (arr[m]%2==0)
        {
            if (EVEN)
            {
                if (n>arr[m])
                 min = m+1;
                else
                 max = m-1;

            }
            else
            {
                do
                {
                    m--;
                }
                while(arr[m]%2==0);

                if (arr[m]==n)
                 break;

                if (n>arr[m])
                 max = m-1;
                else
                 min = m+1;                

            }
        }
        else
        {
            if (!EVEN)
            {
                if (n>arr[m])
                 max = m-1;
                else
                 min = m+1;                    
            }
            else
            {
                do
                {
                    m++;
                }
                while(arr[m]%2!=0);                   

                if (arr[m]==n)
                 break;

                if (n>arr[m])
                 min = m+1;
                else
                 max = m-1;    


            }
        }
    }while(min<max);

    if (arr[m]==n)
     return m;
    else
     return -1;        
}

嘗試

while(min<=max);

您可能會錯過最小和最大重合的情況。

更新

對! 我檢查了 我針對您的程序

int[] array = {19,17,2,15,6,13,12,7,16,3,22};

適用於所有值,並且如果您進行了修正,它將按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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