折半查找

本文介绍了一种高效的搜索算法——折半查找,并通过一个具体的Java实现案例进行讲解。文章强调了折半查找适用于已排序的数据集,并讨论了递归实现中可能出现的问题及解决方法。
public class Test {
	public static void main(String[] args) {
		int[] intArr = { 1, 1, 1, 7, 7, 10, 11, 12, 13, 14, 54, 54, 66, 90,
				267, 345, 456, 789, 45654 };
		System.out.println(binarySearch(intArr, 0, intArr.length - 1, 14));
	}

	public static boolean binarySearch(int[] arr, int start, int end, int target) {
		if (start >= arr.length || end < 0<span style="font-family: Arial, Helvetica, sans-serif;">)</span>
			return false;

		int index = (start + end) / 2;

		if (arr[index] < target) { // 右边
			return binarySearch(arr, index + 1, end, target);
		} else if (arr[index] > target) { // 左边
			return binarySearch(arr, 0, index - 1, target);
		} else {
			return true;
		}
	}
}

总结:(1)折半查找需要数据已经排好了序了。

    (2)在写过程中,遇到了栈溢出,原因很简单,递归的时候,条件写的不好。就很容易循环了,所以写递归的时候需要非常的仔细,判断跳出递归的条件

      是否全都考虑到了。

    (3)折半查找还可以使用非递归的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值