这道题考察的是二分检索算法。
内存和时间消耗以及源代码如下:
int inorder (int* numbers, int numbersSize){
int small = 0;
for (unsigned int i=1; i<numbersSize; i++)
{
if (numbers[i] < numbers[small])
{
small = i;
break;
}
}
return small;
}
int minArray(int* numbers, int numbersSize){
if (numbers[0] == NULL || numbersSize == 0)
{
return NULL;
}
int Firstpoint = 0;
int Lastpoint = numbersSize - 1;
int Midpoint = Firstpoint;
if (numbersSize > 1)
{
if (numbers[Firstpoint] >= numbers[Lastpoint])
{
if (numbers[Firstpoint] == numbers[Lastpoint]
&& numbers[(Firstpoint + Lastpoint) / 2] ==
numbers[Firstpoint])
{
Midpoint = inorder (numbers, numbersSize);
}
else
{
while (Lastpoint - Firstpoint > 1)
{
Midpoint = (Firstpoint + Lastpoint) / 2;
if (numbers[Midpoint] >= numbers[Firstpoint])
{
Firstpoint = Midpoint;
}
else if (numbers[Midpoint] <=
numbers[Lastpoint])
{
Lastpoint = Midpoint;
}
}
Midpoint = Lastpoint;
}
}
}
return numbers[Midpoint];
}