algorithm - 这个数组的二分查找需要多少次比较?
问题描述
我们有以下数组:
[4, 13, 25, 33, 38, 41, 55, 71, 73, 84, 86, 92, 97]
对我来说似乎只需要 3 次比较即可找到 25,因为:首先我们选择中间元素 55。现在我们执行两次比较:55 = 25?55 > 25?这些都不成立,所以我们转到数组的左侧。我们得到子数组:[4, 13, 25, 33, 38, 41]
我们再次除以得到 25 = 25?是的.. 所以我们需要 3 次比较才能得到我们的匹配。我的书说要找到 25 需要进行四次比较。这是为什么呢?
解决方案
由于左侧数组的大小是偶数,因此每个算法都可以选择中间数字之一。因此,比较可能如下所示,进行 4 次比较:
[4, 13, 25, 33, 38, 41, 55, 71, 73, 84, 86, 92, 97]
25 < 55 => [4, 13, 25, 33, 38, 41]
25 < 33 => [4, 13, 25]
25 > 13 => [25]
25 == 25 => Found.
推荐阅读
- svelte - Svelte 浏览器刷新问题
- css - 如何在反应中添加常规的内联样式和条件
- python - Python matplotlib Y轴标签乘以标量
- kubernetes - 如何在 Cent OS 通过 kubevirt 安装 kubernetes?
- android - 菜单项不会在旋转时被破坏 - kotlin
- angular - 如何有条件地将文本与 ngStyle 对齐
- vba - 存在多个时选择收件箱
- framer-motion - 使用共享布局制作动画时,Framer Motion 文本会失真
- apache - 将特定文件夹重定向到子域但没有文件夹名称
- javascript - 如何在页面加载前从 API 获取数据到动态 API URL(空值问题)