DEV Community

Philip Thomas
Philip Thomas

Posted on

Demystifying Algorithms: Linear Search

What is Linear Search?

Linear Search is the simplest and most straightforward algorithm for searching in an array or list. It sequentially checks each element of the collection until the desired element is found or the end of the collection is reached. While it’s not the most efficient for large datasets, it is intuitive and works well for small or unsorted datasets.

Linear Search requires no pre-processing or sorting of data, making it versatile and easy to implement. However, it has a higher time complexity compared to more advanced algorithms like Binary Search.


The Technical View

  • Time Complexity:
    • Best Case: (O(1)) (when the target is the first element).
    • Worst Case: (O(n)) (when the target is the last element or not found).
  • Space Complexity: (O(1)).
    • No additional space is required beyond a few variables for tracking the current index and value.

How Linear Search Works

Linear Search scans each element of the collection:

  1. Start at the first element of the array.
  2. Compare the current element with the target value.
  3. If the current element matches the target, return its index.
  4. If no match is found by the end of the array, return an indicator (e.g., -1 or null).

A Fifth-Grader's Summary

Imagine you’re looking for a specific book in a messy pile. Instead of organizing the pile first, you check each book one by one until you find the one you’re looking for. That’s Linear Search!


Real-World Example

Think of searching for a contact in an unsorted list on your phone. You scroll through each entry, one by one, until you find the name you're looking for.


Examples with Code, Detailed Iterations, and Optimized Patterns


1. Linear Search for an Integer

Problem: Find the index of a target integer in an array.

Code:

public static int LinearSearch(int[] arr, int target)
{
    for (int i = 0; i < arr.Length; i++)
    {
        if (arr[i] == target) // Compare current element with the target
        {
            return i; // Return the index if a match is found
        }
    }
    return -1; // Return -1 if the target is not found
}

// Example Usage
int[] arr = { 4, 2, 7, 1, 9, 3 };
int target = 7;
Console.WriteLine(LinearSearch(arr, target)); // Output: 2
Enter fullscreen mode Exit fullscreen mode

What Happens in Each Iteration:

  1. (i = 0): Compare (arr[0] = 4) with (target = 7). No match.
  2. (i = 1): Compare (arr[1] = 2) with (target = 7). No match.
  3. (i = 2): Compare (arr[2] = 7) with (target = 7). Match found. Return (2).

2. Linear Search for a String

Problem: Find the index of a target string in a list.

Code:

public static int LinearSearch(List<string> list, string target)
{
    for (int i = 0; i < list.Count; i++)
    {
        if (list[i] == target) // Compare current string with the target
        {
            return i; // Return the index if a match is found
        }
    }
    return -1; // Return -1 if the target is not found
}

// Example Usage
List<string> list = new List<string> { "apple", "banana", "cherry", "date" };
string target = "cherry";
Console.WriteLine(LinearSearch(list, target)); // Output: 2
Enter fullscreen mode Exit fullscreen mode

What Happens in Each Iteration:

  1. (i = 0): Compare (list[0] = "apple") with (target = "cherry"). No match.
  2. (i = 1): Compare (list[1] = "banana") with (target = "cherry"). No match.
  3. (i = 2): Compare (list[2] = "cherry") with (target = "cherry"). Match found. Return (2).

3. Linear Search with Early Exit

Problem: Find if a target exists in a list, returning true or false as soon as it is found.

Code:

public static bool LinearSearchExists(int[] arr, int target)
{
    foreach (var num in arr)
    {
        if (num == target) // Compare current element with the target
        {
            return true; // Return true if a match is found
        }
    }
    return false; // Return false if the target is not found
}

// Example Usage
int[] arr = { 10, 20, 30, 40, 50 };
int target = 25;
Console.WriteLine(LinearSearchExists(arr, target)); // Output: False
Enter fullscreen mode Exit fullscreen mode

What Happens in Each Iteration:

  1. Compare (arr[0] = 10) with (target = 25). No match.
  2. Compare (arr[1] = 20) with (target = 25). No match.
  3. Compare (arr[2] = 30) with (target = 25). No match.
  4. Compare (arr[3] = 40) with (target = 25). No match.
  5. Compare (arr[4] = 50) with (target = 25). No match.
  6. Return false because no match was found.

Optimized Patterns

While Linear Search is straightforward, it can be optimized for specific cases:

  1. Early Exit:
    • Stop the search as soon as the target is found, avoiding unnecessary iterations.
  2. Search in Small Datasets:
    • For small or unsorted datasets, Linear Search is often faster than algorithms requiring preprocessing (e.g., sorting).

Advantages and Disadvantages of Linear Search

Advantages:

  • Simple and easy to implement.
  • Does not require sorted data.
  • Works on any data structure that supports sequential access.

Disadvantages:

  • Inefficient for large datasets.
  • Cannot exploit order or structure in data (unlike Binary Search).

Conclusion

Linear Search is an essential algorithm to understand, especially for small datasets or when data is unsorted. Its simplicity and versatility make it a good starting point for solving searching problems. However, for larger datasets or sorted data, exploring more advanced algorithms like Binary Search or Hashing is recommended. Mastering Linear Search builds a strong foundation for understanding other searching techniques!

Top comments (0)