search in rotated sorted array

题目描述

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e.,0 1 2 4 5 6 7might become4 5 6 7 0 1 2).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

题目大意

假设一个已排序的数组在事先未知的某个枢轴处旋转。
(即,0 1 2 4 5 6 7可能变为4 5 6 7 0 1 2)。
给定要搜索的目标值,如果在数组中找到则返回其索引,否则返回-1。
假设数组中不存在重复值。

思路

暴力破解

循环遍历整个数组,找到即返回索引号,找不到就返回-1。

二分查找

  • 先判断是否发生旋转,判断旋转的依据就是数组的第一个值大于最后一个值。
  • 如果没有发生旋转,直接用二分查找
  • 如果发生了旋转,找出旋转点,确定了两个有序的子数组,然后在有序的子数组中进行二分查找。while循环结束,begin对应的是最大值,end对应的是最小值。

代码

暴力破解

int search(int A[], int n, int target)
{
    for(int i=0; i

运行结果

二分查找


以上。

你可能感兴趣的:(search in rotated sorted array)