Pushok

bsrch

Jun 21st, 2012
363
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.50 KB | None | 0 0
  1. int div_(double i, double val)
  2. {
  3.     return ceil(i / val);
  4. }
  5.  
  6. int bsrch( int array[], size_t size, int value )
  7. {
  8.     size /= sizeof(decltype(array));
  9.  
  10.     if( size == 0 )
  11.     {
  12.         return -1;
  13.     }
  14.  
  15.     int start = size / 2;
  16.     int add = 0;
  17.  
  18.     for( int i = start, k = start;; k = div_(k, 2) )
  19.     {
  20.         if( array[i-1] == value )
  21.         {
  22.             return i-1;
  23.         }
  24.  
  25.         if( value < array[i-1] )
  26.         {
  27.             i = add + div_(k,2);
  28.         }
  29.         else if( value > array[i-1] )
  30.         {
  31.             add += k;
  32.  
  33.             i = div_(k,2) + add;
  34.         }
  35.     }
  36.  
  37.     return -1;
  38. }
Advertisement
Add Comment
Please, Sign In to add comment