# How Is Searching Done in Data Structure?

//

Heather Bennett

Searching is an essential operation in data structures. It involves finding a specific element or value within a given collection of data.

The efficiency of the searching process directly impacts the performance of an application or algorithm. In this article, we will explore various searching techniques used in data structures.

## Linear Search

Linear search, also known as sequential search, is the simplest searching technique. It involves traversing the entire collection of data elements one by one until the desired element is found.

To perform a linear search:

1. Start from the beginning of the collection.
2. Compare each element with the Target value.
3. If a match is found, return the index of that element.
4. If the end of the collection is reached without finding a match, return -1 to indicate that the Target element is not present.

Linear search works well for small collections or unsorted data. However, it can be inefficient for large collections as it has a time complexity of O(n), where n is the number of elements in the collection.

## Binary Search

Binary search is a more efficient searching technique used on sorted collections. It follows a divide-and-conquer approach to quickly locate the Target value by repeatedly dividing the search space in half.

To perform a binary search:

1. Start with defining two pointers at both ends of the sorted collection: low and high.
2. Compute mid as (low + high) / 2 to find the middle index.
3. If the middle element matches the Target value, return its index.
4. If the middle element is greater than the Target value, update the high pointer to mid – 1 and repeat step 2.
5. If the middle element is less than the Target value, update the low pointer to mid + 1 and repeat step 2.
6. Continue dividing the search space until either the Target value is found or the low pointer exceeds the high pointer.

Binary search has a time complexity of O(log n), making it highly efficient for large sorted collections. However, it requires that the data be sorted beforehand.

## Hashing

Hashing is a searching technique that utilizes a hash function to map keys or values to specific locations in a data structure called a hash table. It provides constant-time average case complexity for searching operations.

To perform a search using hashing:

1. Apply a hash function to calculate an index or address for the given key/value.
2. Access the corresponding location in the hash table and retrieve any stored values.
3. If there are multiple values at that location (known as collisions), use additional techniques like chaining or open addressing to resolve them.
4. If no value is found at the calculated index, it indicates that the key/value does not exist in the hash table.

Hashing provides efficient searching capabilities with an average case time complexity of O(1). However, it may have worst-case scenarios where performance degrades due to collisions or poor hash functions.

### Conclusion

In data structures, searching plays a crucial role in retrieving specific elements efficiently. The choice of searching technique depends on factors such as collection size, data organization, and expected time complexity.

Linear search works well for small or unsorted collections, while binary search excels for sorted collections. Hashing provides constant-time searching but requires a hash function and a well-implemented hash table.

Remember to analyze the requirements and characteristics of your data to choose the most suitable searching technique.