题目:一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5} 是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。
/*
旋转数组中进行二分查找
要点:首先判断arr[left] < arr[right],
如果是,则进行传统的二分查找
如果不是,则判断arr[left] < arr[mid],
如果是,则说明转折点在右侧
如果不是,则说明转折点在左侧
*/
#include <iostream>
using namespace std;
int rot_arr[10] = {7, 8, 9, 10, 1, 2, 3, 4, 5, 6};
int rot_search(int size, int target)
{
int left = 0, right = size;
int mid;
while (left < right){
mid = (left + right)/2;
if (target == rot_arr[mid]){
return mid;
}
else{
if (rot_arr[left] > rot_arr[right-1]){
if (rot_arr[left] > rot_arr[mid]){
if (target < rot_arr[mid] || target >= rot_arr[left]){
right = mid;
}
else{
left = mid+1;
}
}
else{
if (target < rot_arr[mid] && target >= rot_arr[left]){
right = mid;
}
else{
left = mid+1;
}
}
}
else{
if (target < rot_arr[mid]){
right = mid;
}
else{
left = mid+1;
}
}
}
}
return -1;
}
int main()
{
int i = 0;
for (i = 0; i <= 11; ++i){
cout<<rot_search(10,i)<<endl;
}
return 0;
}