二分查找及拓展

二分查找及拓展
bsearch()功能:在有序数组a的[begin,end)区间中查找数字x,如果找不到,返回0;
low_search()功能:在有序数组a的[begin,end)区间中插入一个数字x,x尽量向前插入,返回x应该插入的位置;
high_search()功能:在有序数组a的[begin,end)区间中插入一个数字x,x尽量向后插入,返回x应该插入的位置。
以下是我的代码:
#include < stdio.h >
long  bsearch( long   * a, long  begin, long  end, long  x)
{
//   [begin,end)
     long  mid;
    
while (begin < end)
    {
       mid
= (begin + end) / 2 ;
       
if (a[mid] == x)  return  mid;
       
else   if (a[mid] > x) end = mid;
       
else  begin = mid + 1 ;
    }
    
return   0 ;
}
long  low_search( long   * a, long  begin, long  end, long  x)
{
    
long  mid;
    
while (begin < end)
    {
       mid
= (begin + end) / 2 ;
       
if (a[mid] >= x) end = mid;
       
else  begin = mid + 1 ;
    }
    
return  begin;
}
long  high_search( long   * a, long  begin, long  end, long  x)
{
    
long  mid;
    
while (begin < end)
    {
       mid
= (begin + end) / 2 ;
       
if (a[mid] <= x) begin = mid + 1 ;
       
else  end = mid;
    }
    
return  begin;
}
int  main()
{
    
// *
    freopen( " data.in " , " r " ,stdin);
    freopen(
" data.out " , " w " ,stdout);
    
// */
     const   long  maxn = 108 ;
    
long  n = 0 ,a[maxn];
    
while (scanf( " %ld " , & a[n + 1 ]) == 1 ) n ++ ;
    
return   0 ;
}


你可能感兴趣的:(二分查找及拓展)