ソート済みの配列データで指定されたデータ(の位置)を探す。同一の値はないものする。 まず、中央の値を見て、探すものと一致すればそれで終わり。 そうでなければ、値を比べてみて、配列の前の方にあるか、後ろの方にあるかを判断する。 どちらか配列半分で同じことを繰り返す。
例えば、サイズ1000の配列から探す場合、探す配列の範囲は 1000、500、250、… と半減していく、 最悪10回で見つかる。
int binary_search(int ary[], int key, int imin, int imax) {
if (imax < imin) {
return KEY_NOT_FOUND;
} else {
int imid = imin + (imax - imin) / 2;
if (ary[imid] > key) {
return binary_search(ary, key, imin, imid - 1);
} else if (ary[imid] < key) {
return binary_search(ary, key, imid + 1, imax);
} else {
return imid;
}
}
}
binarySearch(int[] a, int key) binarySearch(long[] a, int key)