二进制搜索排序的数字

使用伪代码在数字上显示二进制搜索是最简单的

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 实现等实现,以降低真正大输入溢出的风险,这也是一个好主意。