您的位置:首页 > 编程语言 > Java开发

使用Java完成《算法导论》习题2.3-7

2015-06-13 15:05 706 查看
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");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息