Java Program to Implement Interpolation Search Algorithm

This is a Java Program to Implement Interpolation Search Algorithm. Interpolation search (sometimes referred to as extrapolation search) is an algorithm for searching for a given key value in an indexed array that has been ordered by the values of the key. On average the interpolation search makes about log(log(n)) comparisons (if the elements are uniformly distributed), where n is the number of elements to be searched. In the worst case (for instance where the numerical values of the keys increase exponentially) it can make up to O(n) comparisons.
In interpolation-sequential search, interpolation is used to find an item near the one being searched for, then linear search is used to find the exact item.

Here is the source code of the Java Program to Implement Interpolation Search Algorithm. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.

/**
 ** Java Program to Implement Interpolation Search Algorithm
 **/
 
import java.util.Scanner;
 
/** Class InterpolationSearch **/
public class InterpolationSearch
{
    /** interpolationSearch function **/
    public static int interpolationSearch(int[] sortedArray, int toFind)
    {
        int low = 0;
        int high = sortedArray.length - 1;
        int mid;
        while (sortedArray[low] <= toFind && sortedArray[high] >= toFind) 
        {
            if (sortedArray[high] - sortedArray[low] == 0)
                return (low + high)/2;
            /** out of range is possible  here **/
             mid = low + ((toFind - sortedArray[low]) * (high - low)) / (sortedArray[high] - sortedArray[low]);  
 
             if (sortedArray[mid] < toFind)
                 low = mid + 1;
             else if (sortedArray[mid] > toFind)
                 high = mid - 1;
             else
                 return mid;
        }
        if (sortedArray[low] == toFind)
            return low;
           /** not found **/
        else
            return -1; 
    }    
    /** Main method **/
    public static void main(String[] args) 
    {
        Scanner scan = new Scanner( System.in );        
        System.out.println("Interpolation Search Test\n");
        int n, i;
        /** Accept number of elements **/
        System.out.println("Enter number of integer elements");
        n = scan.nextInt();
        /** Create integer array on n elements **/
        int arr[] = new int[ n ];
        /** Accept elements **/
        System.out.println("\nEnter "+ n +" sorted integer elements");
        for (i = 0; i < n; i++)
            arr[i] = scan.nextInt();
        System.out.println("\nEnter element to search for : ");
        int key = scan.nextInt();
 
        int result = interpolationSearch(arr, key);
 
        if (result == -1)
            System.out.println("\n"+ key +" element not found");
        else
            System.out.println("\n"+ key +" elemnt found at position "+ result);
 
    }    
}
Interpolation Search Test
 
Enter number of integer elements
10
 
Enter 10 sorted integer elements
12 24 36 48 60 72 84 96 108 120
 
Enter element to search for :
24
 
24 elemnt found at position 1

Related posts:

Java Program to Perform Left Rotation on a Binary Search Tree
Spring Boot - Batch Service
Calling Stored Procedures from Spring Data JPA Repositories
Java Program to Describe the Representation of Graph using Adjacency Matrix
Compact Strings in Java 9
Prevent Cross-Site Scripting (XSS) in a Spring Application
The Difference Between map() and flatMap()
Spring RestTemplate Request/Response Logging
Extract network card address
Java Program to Find the Nearest Neighbor Using K-D Tree Search
Java Program to Implement Knapsack Algorithm
HttpClient 4 – Follow Redirects for POST
Introduction to Spring Data JDBC
Convert a Map to an Array, List or Set in Java
Java Program to Check if a Given Set of Three Points Lie on a Single Line or Not
Check If Two Lists are Equal in Java
Display Auto-Configuration Report in Spring Boot
Java Program to implement Associate Array
Java Program to Perform Preorder Non-Recursive Traversal of a Given Binary Tree
Getting Started with Stream Processing with Spring Cloud Data Flow
Java – Create a File
Minimum spanning tree - Kruskal's algorithm
Java Program to Implement the Schonhage-Strassen Algorithm for Multiplication of Two Numbers
Java Program to Implement a Binary Search Tree using Linked Lists
Java Program to Compute Discrete Fourier Transform Using the Fast Fourier Transform Approach
Jackson – Change Name of Field
Guide to DelayQueue
Java Program to Generate All Possible Combinations of a Given List of Numbers
Java Program for Topological Sorting in Graphs
Java NIO2 Path API
Receive email using POP3
Java Program to Represent Graph Using 2D Arrays