题型:综合题 题类:模拟题 难易度:困难
浙江大学附属中学2018届高三选考信息技术模拟考试试卷
对于一个轮转后有序数组arr也可以进行二分查找,算法思路如下(以升序为例):每次根据查找的左侧位置L和右侧位置 R 求出中间位置M后,M左边[L,M]和右边
[M+1,R]这两部分中至少一个是有序的(可根据中间位置数据和边界数据的大小关系判 断)。
arr[M]和待查找数据key比较
⑴arr[M]=key,返回M的值;
⑵若M位置右侧有序,当待查找数据在右侧,则下次在右侧查找,否则在M左侧查找。
⑶若M位置左侧有序,当待查找数据在左侧,则下次在左侧查找,否则在M右侧查找。
问题:
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 = M
Else
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
试题篮