一般的なアルゴリズム - バイナリ検索(非再帰的)

バイナリサーチ(非再帰的)

基本的な導入

また、バイナリサーチバイナリサーチ(バイナリ検索)として知られている、それは高い効率的な検索手法です。しかし、バイナリ検索はリニアテーブルが必要です必見順次記憶構造をキーワードによって、テーブル内の要素命じました

  • まず、テーブル要素によりあると仮定昇順両者が等しい場合、検索キーの比較で記録鍵中間位置テーブルが、次いで、ルックアップが成功し、そうでない場合、二つのサブテーブル前後中間位置に記録テーブルの使用、もしキーワード記録の中間位置が検索キーよりも大きい場合、子テーブルの後に子テーブル、またはさらに検索する前にさらに見えます。プロセスは条件が発見されたレコードを満たすまで繰り返され、検索が成功した場合、または子テーブルが存在しなくなるまで、その時点で検索が失敗します。

比較の数

<ログ2 N <B

オペレータの時間複雑さの毛

O(N)= O(ログ2 n)を

コードの実装

ARR = {1、3、8、10、11、67、100}の例で

public class BinarySerch {
	public static void main(String[] args) {
		int[] arr = { 1, 3, 8, 10, 11, 67, 100 };
		// 测试二分查找
		int index = binarySearch(arr, 1);
		System.out.println("index=" + index + "  值【" + arr[index] + "】");
	}
	/**
	 * @Method_Name:binarySearch
	 * @Description: 非递归实现二分查找
	 * @param arr
	 *            数组
	 * @param target
	 *            要查找的数
	 * @return int 返回对应下标 没有找到返回-1
	 */
	public static int binarySearch(int[] arr, int target) {
		int left = 0;
		int right = arr.length - 1;
		while (left <= right) {
			int mid = (right + left) / 2;
			if (arr[mid] == target) {
				return mid;
			} else if (arr[mid] > target) {
				right = mid - 1;
			} else {
				left = mid + 1;
			}
		}
		return -1;
	}
}
公開された39元の記事 ウォン称賛31 ビュー6098

おすすめ

転載: blog.csdn.net/lu_long/article/details/104107472