#include<iostream>
using namespace std;
//顺序查找数组最小值
int minInorder(int* a, int index1, int index2)
{
int result = a[index1];
for (int i = index1 + 1; i < index2; i++)
{
if (a[i] <= result)
result = a[i];
}
return result;
}
//二分法查找旋转数组的最小值
int Min(int *a, int length)
{
if (a == NULL || length <= 0)
return NULL;
int index1 = 0;
int index2 = length - 1;
int indMid = 0;
while (a[index1] >= a[index2])
{
if (index2 - index1 == 1)
{
indMid = index2;
break;
}
indMid = (index1 + index2) / 2;
if (a[index1] == a[indMid] && a[indMid] == a[index2])
{
return minInorder(a, index1, index2);
}
if (a[indMid] > a[index1])
index1 = indMid;
if (a[indMid] < a[index1])
index2 = indMid;
}
return a[indMid];
}
void main()
{
int a[5] = { 3, 4, 5, 1, 2 };//int a[5] = { 1,0,1,1,1 };
int result = Min(a, 5);
cout << result << endl;
}