Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.91 KB | None | 0 0
  1. template <typename T>
  2. int interpolation_search (T * arr, int size, T key)
  3. {
  4.    
  5.     if ( size < 0 || ! arr )         // not the best way to handle this case, but it
  6.          return -1 ;                 // serves to draw attention to it possibly happening.
  7.  
  8.  
  9.     unsigned long long low = 0 ;
  10.     unsigned long long high = size - 1 ;
  11.     unsigned long long mid ;
  12.  
  13.  
  14.     while ( ! (arr [high] == arr [low] || key < arr [low] || arr [high] < key)  )  
  15.     {
  16.             mid = low + (key - arr [low]) * ((high - low) / ( arr [high] - arr [low])) ;
  17.  
  18.             if ( arr [mid] < key )
  19.                  low = mid + 1 ;                                    
  20.  
  21.             else if ( key < arr [mid] )  
  22.                       high = mid - 1 ;
  23.                                
  24.             else return mid ;            
  25.     }
  26.  
  27.     if ( key == arr [low] )  
  28.          return low ;
  29.  
  30.     else return -1 ;  
  31.              
  32. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement