什么是旋转数组中的二分查找?

旋转数组 是一个原本单调递增的数组,经过若干次循环左移后得到的数组。

例如原数组 [1, 3, 5, 7, 9, 12, 15] 循环左移 3 位后变为 [7, 9, 12, 15, 1, 3, 5]

虽然整体不再有序,但数组被“旋转点”分成两段,每段内部仍然分别有序。利用这一特性,我们依然可以用 二分查找O(log n) 时间内找到目标值。

核心思路:每次取中间元素,先判断哪一半是“有序”的,再判断目标值是否落在该有序半区内,从而排除另一半。

旋转数组:整体非有序,但旋转点左右各有一段有序区间

交互演示与代码

旋转数组二分查找

在循环左移后的有序数组中查找目标值。每次通过比较中间元素与边界元素,确定哪一半区间是有序的,并判断目标值是否位于该区间内。

自定义测试数据:
中间位置 m
当前搜索范围 [i, j]
已知有序半区
已排除
找到目标
Step 1: 初始化...

Python 实现

rotated_binary_search.py
关键点思考: 旋转数组的关键在于:每次比较 a[i] 与 a[m],确定左半部分 [i, m] 和右半部分 [m, j] 哪一个仍然保持单调递增,然后只在包含目标值的那一半继续查找。