# 0. 前言

二分查找的思想其实并不难,很多朋友觉得他不好掌握,很可能只是因为没有亲自动手调试,把它弄清楚。

二分查找是最简单的入门算法,我有一位朋友(怪盗卡卡西、代码魔术师)称之为算法世界的 Hello World。但其实就这么简单的二分查找,有一些朋友可能还比较困惑,本章节就为大家揭开二分查找算法的神秘面纱。

友情提示

在学习算法的过程中,练习和调试是必不可少的「升级打怪」的技巧。
如果有捷径,捷径就是「调试」和「练习」。
看别人的教程(包括我的教程)不如自己亲手做一遍,真实地看到程序运行的变量。

这篇题解专治二分疑难杂症。为了讲清楚我想说的部分,文字部分有点多。实在不想看那么多文字的朋友,可以只看第 3 部分「把待搜索区间分成两个部分」,并且把第 7 部分给出的「练习」做一下。相信会对大家有帮助。

掌握二分查找(甚至是其它的算法和数据结构)不可以只看别人写的题解,一定要自己多加练习,配合上自己的思考和总结,才可能做到融会贯通,举一三反

想看「第 35 题」代码的朋友,可以直接跳到「4. 例题讲解:「力扣」第 35 题:搜索插入位置」。


「二分查找」作为一种基础算法,本不该很难,所以希望借这道题的讲解和大家谈谈如何学习算法:

  • 「二分查找」就那么几行代码,我们完全有理由充分掌握它,而不可以用记忆模板、背例题的方式;
  • 「二分查找」虽然看起来有很多种写法,「递归」和「非递归」,「非递归」又有好几种写法:while (left <= right)while (left < right)while (left + 1 < right)。但核心的思想就一个:逐渐缩小问题规模。我们在学习和练习的时候需要 首先着眼于掌握算法的思想,而不该去纠结二分的几种写法的区别和细节,这样会让自己更乱
  • 在面对问题的时候,应该将主要精力放在 如何分析,利用单调性(绝大多数二分查找问题利用的是单调性,也有一些例外)或者题目本身蕴含的可以逐渐缩小问题规模的特性解决问题,而不应该纠结在「二分查找」该怎么写。

下面开始正文。

上次更新: 4/10/2021, 6:19:58 PM