Advertisement
Guest User

Інтерполяційний алгоритм пошуку

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