public class BinarySreachSum2_3_7
{
/**
* 使用二分查找,判断给定集合中是否存在一个给定整数
*
* @date 2015-6-13
* @author lemma
*/
// doSreach方法
public boolean doSreach(int Data[], int target)
{
// 判断和是否存在
boolean isSum = false;
//对集合元素进行查找
for (int index = 0; index < Data.length; index++)
{
//目标元素值等于给定整数减去在查元素
int addend = target - Data[index];
// 二分查找addend
int start = 0;
int end = Data.length - 1;
int middle = (start + end) / 2;
for (; start < end;)
{
//middle等于目标元素值且middle不等于在查元素
if (Data[middle] == addend && middle != index)
{
isSum = true;
break;
}
//middle等于在查元素,退出本次循环
else if (middle == index)
{
break;
}
//middle比目标元素值大,查找左半部分
else if (Data[middle] > addend)
{
end = middle - 1;
middle = (start + end) / 2;
}
//middle比目标元素值小,查找右半部份
else if (Data[middle] < addend)
{
start = middle + 1;
middle = (start + end) / 2;
}
}
}
//返回是否存在的判断
return isSum;
}
public static void main(String args[])
{
int Data[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int target = 20;
if (new BinarySreachSum2_3_7().doSreach(Data, target))
{
System.out.println("Yes");
} else
{
System.out.println("NO");
}
}