[英]how to do binary search on array which is the numbers on even indexes are ascending and the numbers on odd indexes are descending
[英]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.