二进制搜索通过一组偶数增加和奇数减少?

时间:2014-03-20 17:28:48

标签: java search binary-search

我知道我的代码很乱,我很抱歉,我试图尽快写出来,而不是安排陈述。

适用于大多数情况,但不适用于{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;        
}

1 个答案:

答案 0 :(得分:1)

尝试

while(min<=max);

您可能会错过最小和最大重合的情况。

<强>更新

烨!我检查了一下。我针对

运行了你的程序
int[] array = {19,17,2,15,6,13,12,7,16,3,22};

对于所有值,如果进行校正,它将按预期工作。