给出一个有序数组,假设其为升序,随机找到一个点,将这个点后面的序列移到数组前面,构成一个新的序列。
要求对这个新的数组进行查找,找不到返回-1,否则返回其在数组中的位置。
比如输入数组[7,8,9,1,2,3,4,5,6]
查找1,返回3;
查找8,返回1;
查找0,返回-1;
int searchDisorderedArray(int a[], int key, int begin, int end)
{
if(begin == end && a[begin] != key)
return -1;
int mid = (begin+end)/2;
if(a[mid] == key)
return mid;
if(a[mid] > a[end])
{
if(key >= a[begin] && key <=a[mid])
return searchDisorderedArray(a, key, begin, mid-1);
else
return searchDisorderedArray(a, key, mid+1, end);
}
else
{
if(key >= a[mid] && key <=a[end])
return searchDisorderedArray(a, key, mid+1, end);
else
return searchDisorderedArray(a, key, begin, mid-1);
}
}