求递增数组中绝对值最小的数

 

思路很简单:

如果数组头尾,不是一负一正,则可以直接判断。

如果是一负一正: 直接二分搜索最小正数。再与前面的那个数比较绝对值。

 

求递增数组中绝对值最小的数
#include<cstdio>
#include
<cassert>

//从递增数组(允许重复)中找出绝对值最小的数
int bsearch(const int arr[], size_t len)  
{
  assert(len 
> 0);
  
const size_t end = len - 1;
  
if (arr[0>= 0return arr[0];
  
if (arr[end] <= 0return arr[end];
  size_t low 
= 0, high = end;
  
while (low < high) {  //找出大于0的最小数
    size_t mid = low + (high - low) / 2u;
    
if (arr[mid] <= 0) low = mid + 1;
    
else high = mid;
  }  
  
if (arr[low] > -arr[low - 1]) return arr[low - 1];
  
return arr[low];
}

int main()
{
  
int arr[] = {-5-3-101,28 };
  
const int sz = sizeof(arr) / sizeof(arr[0]);
  printf(
"%d\n", bsearch(arr, sz));
}

 

posted @ 2011-04-13 23:53  flyinghearts  阅读(477)  评论(0编辑  收藏  举报