对于一个轮转后有序数组arr可以进行二分查找,算法思路如下(以升序为例):
每次根据查找的左侧位置L和右侧位置R求出中间位置M后,M左边,M和右边[M+1,R],这两部分中至少一个是有序的(可根据中间位置数据和边界数据的大小关系判断)。
arr[M]和待查找数据Key比较
①arr[M]=key,返回M的值
②若M位置的右侧有序,当待查找数据在右侧,则下次在右侧查找,否则在M左侧查找
③若M位置的左侧有序,当待查找数据在左侧,则下次在左侧查找,否则在M右侧查找
(1)对于轮转后有序数组{7,11,13,17,2,3,5}使用以上函数search()查找key值3,所需要的查找次数为______________。
(2)以下VB函数Search()实现了对轮转后有序数组arr进行二分查找的过程,如果查询成功,返回m值,查询失败则返回一1。请补充程序中①②③划线处的代码:
Function Search (key As Integer, L As Integer, R As Integer) As Integer
①______
Do While L<=R And Search=-1
M=(L+R)\2
If arr(M)=key Then
Search=MElse
If ②____ Then
If arr(L)<=key And key<arr(M) Then
R=M-1
Else
L=M+1
End If
Else
If ③____ Then
L=M+1
Else
R=M-1
End If
End If
End If
Loop
End Function
同类型试题
y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2
y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2