折半查找

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)折半查找还可以使用非递归的方式。

你可能感兴趣的:(折半查找)