加载中...

二分查找模板

/**
	 * 递归
	 * 
	 * @param a
	 * @param l
	 * @param r
	 * @return
	 */
	static int binarySearch(int[] a, int l, int r) {
		if (l > r) {// 这里为什么不加等号呢? 因为 l == r 的情况也要进行一次判断看是否符合条件
			return -1;
		}
		int mid = (l + r) / 2;
		if (x == a[mid]) {
			return mid;
		} else if (x < a[mid]) {
			return binarySearch(a, mid + 1, r);
		} else {
			return binarySearch(a, l, mid - 1);
		}
	}

	/**
	 * 非递归
	 * 
	 * @param a
	 * @param l
	 * @param r
	 * @return
	 */
	static int binarySearch1(int[] a, int l, int r) {
		while (l <= r) {
			int mid = (l + r) / 2;
			if (x == a[mid]) {
				return mid;
			} else if (x < a[mid]) {
				r = mid - 1;
			} else {
				l = mid + 1;
			}
		}
		return -1;
	}
posted @ 2023-03-19 22:31  ChuenSan  阅读(13)  评论(0编辑  收藏  举报