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

 

思路很简单:

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

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

 

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

// 从递增数组(允许重复)中找出绝对值最小的数
int  bsearch( const   int  arr[], size_t len)  
{
  assert(len 
>   0 );
  
const  size_t end  =  len  -   1 ;
  
if  (arr[ 0 >=   0 return  arr[ 0 ];
  
if  (arr[end]  <=   0 return  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 - 1 0 1 , 2 8  };
  
const   int  sz  =   sizeof (arr)  /   sizeof (arr[ 0 ]);
  printf(
" %d\n " , bsearch(arr, sz));
}

 

你可能感兴趣的:(数组)