2.1.3在旋转排序数组中的搜索
//描述
//假设一个排序数组在您事先未知的枢轴上旋转。
//(即0 1 2 4 5 6 7 可能为4 5 6 7 0 1 2)。
//系统为您提供了一个要搜索的目标值。
//如果在数组中找到,则返回其索引,否则将返回 - 1。
//您可以假定该数组中不存在任何副本
#include<vector>
#include<iostream>
using namespace std;
int find(const vector<int>& a, int n);
int main()
{
vector<int> a = { 4,5,6,7,8,9,0,1,2,3 };
cout<<find(a,8);
}
int find(const vector<int> &a, int n)
{
int begin = 0;
int end = a.size();
int mid = 0;
while (begin != end)
{
mid = begin + (end - begin) / 2;
if (a[mid] == n)
{
return mid;
}
if (a[begin] <= a[mid])
{
if (n >= a[begin] && n <= a[mid])
{
end = mid;
}
else
{
begin = mid + 1;
}
}
else
{
if (a[mid] < n && n <= a[end-1])
{
begin = mid + 1;
}
else
{
end = mid;
}
}
}
return -1;
}