当前位置: 高中信息技术 / 综合题
  • 1. (2018·浙江模拟) 【加试题】“轮转后有序数组(Rotated Sorted Array)”是将有序数组其中某一个数为分割点,将其之前的所有数都轮转到数组的末尾所得。比如{7,11,13,17,2,3,5}就是一个轮转后的有序数组,原有序数组中的字串{2,3,5}被轮转到了数组的末尾处。

    对于一个轮转后有序数组arr也可以进行二分查找,算法思路如下(以升序为例):每次根据查找的左侧位置L和右侧位置 R 求出中间位置M后,M左边[L,M]和右边

    [M+1,R]这两部分中至少一个是有序的(可根据中间位置数据和边界数据的大小关系判 断)。

    arr[M]和待查找数据key比较

    ⑴arr[M]=key,返回M的值;

    ⑵若M位置右侧有序,当待查找数据在右侧,则下次在右侧查找,否则在M左侧查找。

    ⑶若M位置左侧有序,当待查找数据在左侧,则下次在左侧查找,否则在M右侧查找。

    问题:

    1. (1) 对于轮转后有序数组{7,11,13,17,2,3,5}使用以上函数 search()查找key值3,所需要的查找次数为
    2. (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 = 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

微信扫码预览、分享更方便