# 用7个数字解释二分查找

我们要从已经按从小到大排列的一组数字中找出37。这组数字是5、12、19、26、37、48、60。请把它看作七张排在桌上的卡片，而不是一段抽象代码。每次只比较当前范围中间的一张卡片，比较后再缩小范围。动画里每张卡片的数值始终不变，37的目标标签也始终保留，观众因此能看清范围变小，而不是误以为数字被模型改写了。

第一轮，范围是七张卡片，中间位置是第4张，数值26。我们比较目标37与26，37大于26。因为这些卡片已经排好序，26及其左边的5、12、19都比37小，所以可以把这一整段排除。排除不等于删除原始资料，动画应让这些卡片变淡，并保留原始完整数组的缩略位置。此时下一轮只处理右边的37、48、60。

第二轮，当前范围只有三张卡片，其中间值是48。目标37小于48，所以48及右侧60都不再是候选。画面把这两张卡片变淡，留下37。注意，本轮的中间位置是当前范围的中间，而不是再次取整个原数组的26。字幕必须说清楚“在剩余范围里重新取中间”，避免观众把算法理解为一直与同一张卡片比较。

第三轮，只剩37这一张卡片。它等于目标，所以查找成功。本例总共进行了三次数值比较。第三轮仍然要展示等于判断，不能因为剩下一张就跳过比较。画面最后列出三条比较：37大于26、37小于48、37等于37。数字卡片旁可加“示例数组”的小字，强调这是解释机制的小样本，不是性能评测。

二分查找的前提是有序，并且本题保留每个数字的唯一位置。本片不用演示重复值的首次出现位置，也不讨论浮点数比较或数据库索引。如果输入没有排序，排除一半就没有依据。片尾应把“先确认已排序”作为前提提醒，而不是让读者记住一个无条件适用的捷径。示例没有展示37不存在的情况，进一步练习可以把目标改成38，并跟踪空范围时怎样结束。

这段说明适合拆成三幕，每幕保留当前范围、比较关系和下一步。45秒是这个教学片的编辑选择，并不代表算法实际耗时。不要在成片里写“提速多少倍”或给出缺乏数据的工作效率承诺。旁白可以在读者自己的项目中补充，本下载示例采用静音图解，让每一帧的逻辑关系可以直接核对。