C# Program to Implement Exponential Search

C# Program to Implement Exponential Search

Searching efficiently in a sorted array is a core skill for any programmer. While algorithms like Linear Search and Binary Search are widely used, Exponential Search offers a unique approach that combines speed with adaptability. Exponential Search is designed to quickly locate a range where the target element might exist and then apply Binary Search within that range. This makes it highly efficient for large sorted datasets.

Pluralsight Logo
Accelerate your tech career
with hands-on learning.
Whether you're a tech newbie or a total pro,
get the skills and confidence to land your next move.
Start 10-Day Free Trial

Exponential Search is especially useful when the target element is closer to the beginning of the array or when you need to minimize comparisons in huge arrays. By learning this algorithm, beginners gain insight into how divide-and-conquer strategies and efficient range detection can be combined to solve searching problems in real-world scenarios.

Program 1: Exponential Search Using Loop and Binary Search

This program demonstrates the standard approach of Exponential Search, which first finds a range exponentially and then performs Binary Search in that range.

using System;

class Program
{

    static int BinarySearch(int[] arr, int left, int right, int key)
    {

        while (left <= right)
        {

            int mid = left + (right - left) / 2;

            if (arr[mid] == key)
                return mid;
            else if (arr[mid] < key)
                left = mid + 1;
            else
                right = mid - 1;

        }

        return -1;

    }

    static int ExponentialSearch(int[] arr, int key)
    {

        if (arr[0] == key)
            return 0;

        int i = 1;

        while (i < arr.Length && arr[i] <= key)
            i = i * 2;

        return BinarySearch(arr, i / 2, Math.Min(i, arr.Length - 1), key);

    }

    static void Main()
    {

        int[] numbers = { 1, 3, 5, 7, 9, 11, 13, 15 };
        int target = 9;

        int result = ExponentialSearch(numbers, target);

        if (result != -1)
            Console.WriteLine($"Element {target} found at index {result}");
        else
            Console.WriteLine($"Element {target} not found in the array");

    }

}

This program works by doubling the index until the target range is found. It is very useful for beginners to understand how exponential growth helps narrow down search areas quickly.

Program 2: Recursive Exponential Search

The recursive approach simplifies understanding how Exponential Search narrows down the search space using recursion.

using System;

class Program
{

    static int BinarySearchRecursive(int[] arr, int left, int right, int key)
    {

        if (left > right)
            return -1;

        int mid = left + (right - left) / 2;

        if (arr[mid] == key)
            return mid;

        else if (arr[mid] < key)
            return BinarySearchRecursive(arr, mid + 1, right, key);
        else
            return BinarySearchRecursive(arr, left, mid - 1, key);

    }

    static int ExponentialSearchRecursive(int[] arr, int key)
    {

        if (arr[0] == key)
            return 0;

        int i = 1;

        while (i < arr.Length && arr[i] <= key)
            i = i * 2;

        return BinarySearchRecursive(arr, i / 2, Math.Min(i, arr.Length - 1), key);

    }

    static void Main()
    {

        int[] numbers = { 2, 4, 6, 8, 10, 12, 14, 16 };
        int target = 10;

        int result = ExponentialSearchRecursive(numbers, target);

        if (result != -1)
            Console.WriteLine($"Element {target} found at index {result}");
        else
            Console.WriteLine($"Element {target} not found in the array");

    }

}

This version highlights recursive thinking, which helps beginners understand how algorithms can break problems into smaller, solvable parts automatically.

Program 3: Exponential Search with Floating-Point Numbers

Exponential Search isn’t limited to integers. It works on sorted floating-point numbers as well, which is useful in scientific computing or financial applications.

using System;

class Program
{

    static int BinarySearchFloat(double[] arr, int left, int right, double key)
    {

        while (left <= right)
        {

            int mid = left + (right - left) / 2;

            if (Math.Abs(arr[mid] - key) < 1e-9)
                return mid;
            else if (arr[mid] < key)
                left = mid + 1;
            else
                right = mid - 1;
        }

        return -1;

    }

    static int ExponentialSearchFloat(double[] arr, double key)
    {

        if (Math.Abs(arr[0] - key) < 1e-9)
            return 0;

        int i = 1;

        while (i < arr.Length && arr[i] <= key)
            i = i * 2;

        return BinarySearchFloat(arr, i / 2, Math.Min(i, arr.Length - 1), key);

    }

    static void Main()
    {

        double[] numbers = { 1.1, 2.2, 3.3, 4.4, 5.5 };
        double target = 4.4;

        int result = ExponentialSearchFloat(numbers, target);

        if (result != -1)
            Console.WriteLine($"Element {target} found at index {result}");
        else
            Console.WriteLine($"Element {target} not found in the array");

    }

}

This demonstrates how the algorithm adapts to different data types, reinforcing the idea that searching is a versatile concept in programming.

Program 4: Exponential Search on Strings

Exponential Search can also handle sorted string arrays, such as names or IDs, using lexicographical comparison.

using System;

class Program
{

    static int BinarySearchString(string[] arr, int left, int right, string key)
    {

        while (left <= right)
        {

            int mid = left + (right - left) / 2;
            int cmp = string.Compare(arr[mid], key);

            if (cmp == 0)
                return mid;
            else if (cmp < 0)
                left = mid + 1;
            else
                right = mid - 1;

        }

        return -1;

    }

    static int ExponentialSearchString(string[] arr, string key)
    {

        if (arr[0] == key)
            return 0;

        int i = 1;

        while (i < arr.Length && string.Compare(arr[i], key) <= 0)
            i = i * 2;

        return BinarySearchString(arr, i / 2, Math.Min(i, arr.Length - 1), key);

    }

    static void Main()
    {

        string[] names = { "Alice", "Bob", "Charlie", "Diana", "Edward" };
        string target = "Diana";

        int result = ExponentialSearchString(names, target);

        if (result != -1)
            Console.WriteLine($"Element {target} found at index {result}");
        else
            Console.WriteLine($"Element {target} not found in the array");

    }

}

This version emphasizes practical applications, such as searching for a name in a sorted directory.

Frequently Asked Questions (FAQ)

Q1: What is Exponential Search best used for?
It’s ideal for large, sorted arrays where the target is likely near the beginning or when you want to reduce comparisons quickly.

Q2: How is Exponential Search different from Binary Search?
Exponential Search first finds a range exponentially and then applies Binary Search, while Binary Search assumes the whole array is the search space.

Q3: What is the time complexity of Exponential Search?
It has O(log n) complexity for finding the range plus O(log n) for Binary Search, effectively O(log n) overall.

Q4: Can Exponential Search work on strings or floats?
Yes, as long as the array is sorted, it works on any comparable data type, including strings and floating-point numbers.

Conclusion

Exponential Search is a fast and adaptable search algorithm that is perfect for beginners looking to understand range detection and divide-and-conquer strategies. By practicing with integers, floats, strings, loops, and recursion, you gain a strong foundation in efficient searching techniques.

Once comfortable with Exponential Search, exploring Jump Search, Interpolation Search, and Ternary Search will further expand your skills in handling large datasets effectively.

Scroll to Top