You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CS50x 2020 Find作业check50测试报程序退出超时问题排查

问题根因定位

你遇到的测试超时、死循环问题,完全出在search函数的二分查找实现上,sort函数的选择排序逻辑没有问题。

  • 核心错误:你将middle(数组中间索引)的计算放在了while循环外部,仅在函数启动时计算一次。后续循环中你不断更新minimum、maximum的边界值,但从未根据新的边界重新计算middle的取值,导致循环逻辑卡死。

举个实际触发死循环的例子:对长度为4的有序数组[1, 3, 5, 7]查找值7时:

  1. 初始计算得到middle=1(对应数组值3)
  2. 判定7>3,将minimum更新为2,计算剩余元素数n=7-2+1=2
  3. 由于middle从未更新,下一轮循环依然取values[1]=3和7对比,再次触发“把minimum设为2”的逻辑,n始终卡在2,循环永远不会退出,最终触发测试超时。
修正方法
  • 将middle的计算逻辑移入while循环内部,每次更新完边界后,基于当前的minimum、maximum重新计算中间索引

修正后的核心代码逻辑参考:

bool search(int value, int values[], int n)
{
    if (n < 0)
    {
        return false;
    }

    int minimum = 0, maximum = n - 1;

    while (n > 0)
    {
        // 每次循环根据当前边界重新计算中间索引
        int middle = (maximum - minimum) / 2 + minimum;

        if (value == values[middle])
        {
            return true;
        }
        else if (value > values[middle])
        {
            minimum = middle + 1;
        }
        else if (value < values[middle])
        {
            maximum = middle - 1;
        }

        n = maximum - minimum + 1;
    }

    return false;
}

内容的提问来源于stack exchange,提问作者koby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 00:27:02