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

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");
		}
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值