セクション 9.3 で、Job Bentley は修正された二分探索を提示します。
9.3 に示されている典型的な実装とより良いアプローチの短い抜粋
if (arr[mid] < key) low = mid+1
else if (arr[mid] > key) high = mid-1
else return mid;
異なる不変式との修正された/効率的な比較..
if (arr[mid] < key) low = m;
else high = m;
ループの外側では、キーがインデックス 'high' にあるかどうかがチェックされます。変更された二分探索では、左側のインデックス 'low' は (0 ではなく) -1 で始まり、'high' インデックスは (n-1 ではなく) n で始まり、ループが実行されます。
while (low + 1 != high)
この変更された検索は、low = 0 および high = n-1 に設定しても機能するようです。
しかし、Job Bentley のコードを推測するのは避けたいと思います。では、なぜ彼は low を -1 に、high を n に設定しているのでしょうか? これだけが機能するコーナーケースはありますか?