JavaScriptを使って二分検索を実現します.

1545 ワード

二分割検索とは、半分割検索とも言われ、秩序ある配列の中から指定された値を探し出して、その値の配列内のインデックスを返します.検索ステップは、(1)順序配列の最中間要素から検索を開始し、要素が指定された検索値である場合、検索プロセスは終了する.次のステップを実行します.(2)検索する要素が中間要素より大きいまたは小さいと指定された場合、配列が中間要素より大きいまたは小さい領域で検索し、第1ステップの動作を繰り返す.(3)上記のプロセスを繰り返し、ターゲット要素の索引を見つけ、検索に成功するまで.またはサブアレイが空になるまで検索に失敗しました.
利点は、比較回数が少なく、検索速度が速く、平均性能が良いことです.その欠点はチェックシートが順序表であり、挿入削除が困難であることです.したがって、折半ルックアップ方法は、経常的に変動せずに頻繁に検索するためのシーケンステーブルに適用される.
//       js  
function binary_search(arr, key) {
    var low = 0,
        high = arr.length - 1;
 
    while(low <= high) {
        var mid = parseInt((high + low) /2);
  		// console.log(mid+'h'+high+'l'+low);
        if(key == arr[mid]) {
            return mid;
        } else if(key > arr[mid]) {
            low = mid + 1;
        } else {
            high = mid -1;
        }
    }
	return -1
}

var arr = [1,2,3,4,5,6,7,8,9,10,11,23,44,86];
var result = binary_search(arr, 10);
console.log(result);   // 9
var resultNone = binary_search(arr, 100);
console.log(resultNone);  // -1
//      js  
function binary_search2(arr, low, high, key) {
	if(low > high) {
		return -1;
	}
	var mid = parseInt((high + low) / 2);
	if(arr[mid] == key) {
		return mid;
	} else if(arr[mid] > key) {
		high =mid -1;
		return binary_search2(arr, low, high, key);
	} else if(arr[mid] < key) {
		low = mid +1;
		return binary_search2(arr, low, high, key);
	}
}

var arr = [1,2,3,4,5,6,7,8,9,10,11,23,44,86];
var result2 = binary_search2(arr, 0, 13, 10);
console.log(result2);   // 9