二進位制搜尋排序的數字
使用虛擬碼在數字上顯示二進位制搜尋是最簡單的
int array[1000] = { sorted list of numbers };
int N = 100; // number of entries in search space;
int high, low, mid; // our temporaries
int x; // value to search for
low = 0;
high = N -1;
while(low < high)
{
mid = (low + high)/2;
if(array[mid] < x)
low = mid + 1;
else
high = mid;
}
if(array[low] == x)
// found, index is low
else
// not found
不要嘗試通過將 array [mid]與 x 進行比較來提前返回。額外的比較只能減慢程式碼速度。請注意,你需要將一個新增到低位以避免被整數除法陷入困境。
有趣的是,上面的二進位制搜尋版本允許你在陣列中找到 x 的最小出現位置。如果陣列包含 x 的重複項,則可以稍微修改演算法,以便通過簡單地新增到 if 條件來返回 x 的最大出現:
while(low < high)
{
mid = low + ((high - low) / 2);
if(array[mid] < x || (array[mid] == x && array[mid + 1] == x))
low = mid + 1;
else
high = mid;
}
請注意,不是做 mid = (low + high) / 2
,而是嘗試使用 mid = low + ((high - low) / 2)
進行 Java 實現等實現,以降低真正大輸入溢位的風險,這也是一個好主意。