题目来源:http://blog.csdn.net/linygood/article/details/8898691
自己写了下:
#include <cmath>
#include <cstdio>
int min_abs(int * arr, int size)
{
if (arr[0] >= 0)
{
return(arr[0]);
}
if (arr[size - 1] <= 0)
{
return(arr[size - 1]);
}
while (true)
{
if (2 >= size)
{
return(-arr[0] < arr[size - 1] ? arr[0] : arr[size - 1]);
}
int middle = size / 2;
if (0 == arr[middle])
{
return(0);
}
else if (0 < arr[middle])
{
size = middle + 1;
}
else
{
arr += middle;
size -= middle;
}
}
return(999);
}
int main(int argc, char * argv[])
{
{
int arr[] = { -3, -2, -1 };
int size = sizeof(arr) / sizeof(arr[0]);
int abs_min = min_abs(arr, size);
printf("abs_min is %d\n", abs_min);
}
{
int arr[] = { -3, -2, -1, 0 };
int size = sizeof(arr) / sizeof(arr[0]);
int abs_min = min_abs(arr, size);
printf("abs_min is %d\n", abs_min);
}
{
int arr[] = { 1, 2, 3 };
int size = sizeof(arr) / sizeof(arr[0]);
int abs_min = min_abs(arr, size);
printf("abs_min is %d\n", abs_min);
}
{
int arr[] = { 0, 1, 2, 3 };
int size = sizeof(arr) / sizeof(arr[0]);
int abs_min = min_abs(arr, size);
printf("abs_min is %d\n", abs_min);
}
{
int arr[] = { -1, 0, 1, 2, 3 };
int size = sizeof(arr) / sizeof(arr[0]);
int abs_min = min_abs(arr, size);
printf("abs_min is %d\n", abs_min);
}
{
int arr[] = { -3, -2, -1, 0, 1 };
int size = sizeof(arr) / sizeof(arr[0]);
int abs_min = min_abs(arr, size);
printf("abs_min is %d\n", abs_min);
}
{
int arr[] = { -3, -2, 2, 3 };
int size = sizeof(arr) / sizeof(arr[0]);
int abs_min = min_abs(arr, size);
printf("abs_min is %d\n", abs_min);
}
{
int arr[] = { -3, -2, 1, 2, 3 };
int size = sizeof(arr) / sizeof(arr[0]);
int abs_min = min_abs(arr, size);
printf("abs_min is %d\n", abs_min);
}
{
int arr[] = { -3, -2, -1, 2, 3 };
int size = sizeof(arr) / sizeof(arr[0]);
int abs_min = min_abs(arr, size);
printf("abs_min is %d\n", abs_min);
}
return(0);
}