//11 旋转数组中的最小数字
#include<iostream>
using namespace std;
int MinInorder(int *arr, int first, int second)
{
int result = arr[first];
for (int i = first+1; i <= second; i++)
{
if (result > arr[i])
result = arr[i];
}
return result;
}
int min(int *arr, int length)
{
if (arr==nullptr||length<=0)
{
throw new exception("Invalid parameters");
}
int first, mid,second;
first = 0;
mid = first;
second = length - 1;
while(arr[first] >= arr[second])
{
if (second - first == 1)
{
mid = second;
break;
}
mid = (first + second) / 2;
if (arr[first]==arr[second]&&arr[second]==arr[mid])
{
return MinInorder(arr, first, second);
}
if (arr[mid]>=arr[first])
{
first = mid;
}
else if (arr[mid] <= arr[first])
{
second = mid;
}
}
return arr[mid];
}
int main()
{
//test01
int arr[5] = { 3,4,5,1,2 };
int a=min(arr, 5);
cout << a << endl;
//test02
int arr2[5] = { 1,0,1,1,1 };
int b = min(arr2, 5);
cout << b << endl;
std::cin.get();
return 0;
}