有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现
#include<iostream>
using namespace std;
double searchmin(double*, int, int);
int main()
{
double L[] = {-10, -5,1,3,9};
double minL = searchmin(L, 0, sizeof(L)/8-1);
cout << "min=" << abs(minL )<< endl;
return 1;
}
double searchmin(double* arr, int low, int high)
{
if (arr[high] <= 0)
return -arr[high];
if (arr[low] >= 0)
return arr[low];
int mid = (low + high) / 2;
if (arr[mid] * arr[mid - 1] <= 0)
return abs(arr[mid]) > abs(arr[mid - 1]) ? arr[mid - 1] : arr[mid];
if (arr[mid] * arr[mid +1] <= 0)
return abs(arr[mid]) > abs(arr[mid +1]) ? arr[mid + 1] : arr[mid];
if (arr[mid] > 0)
return searchmin(arr, low, mid - 1);
else
return searchmin(arr, mid + 1, high);
}