mirror of
https://hub.njuu.cf/TheAlgorithms/C-Plus-Plus.git
synced 2023-10-11 13:05:55 +08:00
document interpolation search
This commit is contained in:
parent
d9ffc8aca1
commit
7fd12991f7
@ -1,36 +1,61 @@
|
|||||||
#include<iostream>
|
/**
|
||||||
|
* \file
|
||||||
|
* \brief [Interpolation
|
||||||
|
* search](https://en.wikipedia.org/wiki/Interpolation_search) algorithm
|
||||||
|
*/
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
// function to search the value in an array using interpolation search
|
/** function to search the value in an array using interpolation search
|
||||||
int search(int arr[], int value, int len) {
|
* \param [in] arr array to search in
|
||||||
|
* \param [in] value value to search for
|
||||||
|
* \param [in] len length of array
|
||||||
|
* \returns index where the value is found
|
||||||
|
* \returns 0 if not found
|
||||||
|
*/
|
||||||
|
int interpolation_search(int arr[], int value, int len) {
|
||||||
int low = 0, high, mid;
|
int low = 0, high, mid;
|
||||||
high = len-1;
|
high = len - 1;
|
||||||
|
|
||||||
while (arr[low] <= value && arr[high] >= value) {
|
while (arr[low] <= value && arr[high] >= value) {
|
||||||
mid = (low + ((value-arr[low])*(high-low)) / (arr[high]-arr[low]));
|
mid = (low +
|
||||||
|
((value - arr[low]) * (high - low)) / (arr[high] - arr[low]));
|
||||||
if (arr[mid] > value)
|
if (arr[mid] > value)
|
||||||
high = mid-1;
|
high = mid - 1;
|
||||||
else if (arr[mid] < value)
|
else if (arr[mid] < value)
|
||||||
low = mid+1;
|
low = mid + 1;
|
||||||
else
|
else
|
||||||
return mid;
|
return mid;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (arr[low] == value)
|
if (arr[low] == value)
|
||||||
return low;
|
return low;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** main function */
|
||||||
int main() {
|
int main() {
|
||||||
int n, value, array[100], re;
|
int n, value, re;
|
||||||
|
|
||||||
std::cout << "Enter the size of array(less than 100) : ";
|
std::cout << "Enter the size of array(less than 100) : ";
|
||||||
std::cin >> n;
|
std::cin >> n;
|
||||||
|
|
||||||
|
int *array = new int[n];
|
||||||
|
|
||||||
std::cout << "array in ascending (increasing) order : " << std::endl;
|
std::cout << "array in ascending (increasing) order : " << std::endl;
|
||||||
for (int i=0; i < n; i++)
|
|
||||||
std::cin >> array[i];
|
for (int i = 0; i < n; i++) std::cin >> array[i];
|
||||||
|
|
||||||
std::cout << "Enter the value you want to search : ";
|
std::cout << "Enter the value you want to search : ";
|
||||||
std::cin >> value;
|
std::cin >> value;
|
||||||
re = search(array, value, n);
|
|
||||||
|
re = interpolation_search(array, value, n);
|
||||||
|
|
||||||
if (re == 0)
|
if (re == 0)
|
||||||
std::cout << "Entered value is not in the array" << std::endl;
|
std::cout << "Entered value is not in the array" << std::endl;
|
||||||
else
|
else
|
||||||
std::cout << "The value is at the position " << re << std::endl;
|
std::cout << "The value is at the position " << re << std::endl;
|
||||||
|
|
||||||
|
delete[] array;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user