💡
原文中文,约10700字,阅读约需26分钟。
📝
内容提要
二分查找算法用于在有序列表中查找元素位置,时间复杂度为O(log n)。通过比较中间值与目标值,逐步缩小查找范围。常见错误包括过早退出、无法退出和剔除目标值。变种upper bound和lower bound用于处理重复元素。
🎯
关键要点
- 二分查找算法用于在有序列表中查找元素位置,时间复杂度为O(log n)。
- 通过比较中间值与目标值,逐步缩小查找范围。
- 常见错误包括过早退出、无法退出和剔除目标值。
- 传统二分查找每次迭代都比较中间值和目标值。
- 如果中间值偏小,剔除中间值及其左边的值;如果偏大,剔除中间值及其右边的值。
- 找到目标值时返回中间值的索引,列表为空时返回-1。
- 常见错误包括过早退出、无法退出、剔除目标值和整型溢出。
- 中途不退出的二分查找减少了一次比较,但需要在仅剩一个元素时判断是否与目标值相等。
- upper bound和lower bound用于处理重复元素,upper bound返回第一个比目标值大的元素。
- lower bound返回第一个等于目标值的元素的地址。
- Knuth的二分查找使用查表的方法来优化中间值的计算。
- 指数查找通过比较指数位置的元素来找到目标值的地址。
➡️