排序的数组在事先未知的某个枢轴处旋转。因此,例如,1 2 3 4 5可能变为3 4 5 1 2.现在我们需要在O(log n)时间内在旋转的数组中找到一个元素。
input: 3 4 5 1 2
output: 3 (index of 1)
UNIMODAL-SEARCH (A[1 . . n])
a, b 1, n
while a < b
do mid ←(a + b)/2
if A[mid] < A[mid + 1]
then a mid + 1
else b mid
return A[a]
该算法满足所有要求。但是当给出输入时有一个问题 (5,1,2,3,4}它无法正确找到枢轴。任何建议如何找到正确的枢轴位置?
但是在给出时
input: 5 1 2 3 4
output: something other than 1
如何找到支点?