binarySearch 2分探索
int binarySearch(DATA *data, int nmem, int target);
typedef struct {
int key; /* 比較のキーとなるフィールド */
int info; /* その他のフィールド */
} DATA;
data (入力)データレコードの配列
nmem (入力)レコード配列の大きさ
target (入力)探索目標とするキーの値
見つかった場合は配列の要素番号(配列の先頭要素の番号は0)。 見つからなかった場合は -1。
int binarySearch(DATA *data, int nmem, int target){
int left, right, middle;
left = 0;
right = nmem - 1;
while (left < right) {
middle = (left + right) / 2;
if ((data + middle)->key < target) left = middle + 1;
else right = middle;
}
if ((data + left)->key == target)
return left;
return -1;
}
1回の比較で探索すべき範囲は半分になるので、探索成功あるいは失敗の どちらの場合でも、計算量は O(log n) である。
データが降順でソートされている場合は、不等号の向きを変ればよい。