Binary Search Algorithm in C
Set two pointers:
These represent the current search boundaries.
2. Find the Middle Element
Calculate the midpoint using:
mid = low + (high - low) / 2
This keeps overflow from happening and guarantees that the midpoint is correctly computed.
3. Compare the Middle Value with the Target
- If arr[mid] == target, the search is successful, and the index is returned.
- If arr[mid] > target, narrow the search to the left half by setting high = mid - 1.
- If arr[mid] < target, narrow the search to the right half by setting low = mid + 1.
4. Repeat the Process
Keep finding the midpoint and changing the search limits until low > high.
5. End Condition
If, after range collapsing, the element is not there, return -1 to show that the target is not in the array.
Pseudocode for Binary Search in C
BinarySearch(arr, n, target):
low ← 0
high ← n - 1
while low ≤ high do:
mid ← low + (high - low) / 2
if arr[mid] == target then
return mid
else if arr[mid] < target then
low ← mid + 1
else
high ← mid - 1
return -1 // Target not found
Iterative and Recursive Implementations of Binary Search
Binary search may be written using either one of two primary ways: the iterative method or the recursive method. The main idea of both methods is the use of divide and conquer strategy, which leads to the rapid reduction of the interval where the searched value can be found.
Iterative Method
- How it works:
In addition, it uses a comparison loop to continuously adjust the search boundaries (that is, left and right pointers) until the target is found or there is no more room to search. - Time Complexity: O(log n)
- Space Complexity: O(1) (no extra space used beyond variables)
Sample Code (C):
int binarySearchIterative(int arr[], int size, int target) {
int left = 0, right = size - 1;
while (left <= right) {
int mid = left + (right - left) / 2; // Safe midpoint calculation
if (arr[mid] == target)
return mid; // Successful search
else if (arr[mid] < target)
left = mid + 1;
else
right = mid - 1;
}
return -1; // Unsuccessful search
}
Recursive Method
- How it works:
The function calls itself with updated search boundaries based on the comparison at each step, dividing the search interval until the base case is reached. - Time Complexity: O(log n)
- Space Complexity: O(log n) (due to the call stack for each recursive call)
Sample Code (C):
int binarySearchRecursive(int arr[], int left, int right, int target) {
if (left > right)
return -1; // Unsuccessful search
int mid = left + (right - left) / 2; // Midpoint calculation
if (arr[mid] == target)
return mid; // Successful search
else if (arr[mid] < target)
return binarySearchRecursive(arr, mid + 1, right, target);
else
return binarySearchRecursive(arr, left, mid - 1, target);
}
Key Differences
| Feature |
Iterative Method |
Recursive Method |
| Approach |
Loop-based |
Function calls itself |
| Space Complexity |
O(1) |
O(log n) |
| Readability |
Often more concise |
Can be more intuitive |
| Stack Usage |
Minimal |
Uses the call stack |
| Suitable for Large Data |
Yes, very reliable |
May hit recursion depth limits |
Relevant Concepts
- Midpoint calculation: Use mid = left + (right - left) / 2 to avoid overflow.
- Search boundaries: Adjust left and right based on comparison.
- Successful/Unsuccessful searches: Return the index if found, or -1 if not.
How Does Binary Search Algorithm in C Work? (Step-by-Step Example)
Given Array:
10, 14, 19, 26, 27, 31, 33, 35, 42, 44
Target Value: 31
Step-by-Step Process:
1. Initial Setup:
- low = 0, high = 9 (indices of first and last elements).
- Calculate mid:
mid = low + (high - low) / 2
mid = 0 + (9 - 0) / 2 = 4
2. First Comparison:
- Value at index 4 is 27.
- Since 31 > 27, update low = mid + 1 = 5.
3. Second Calculation:
mid = 5 + (9 - 5) / 2 = 7
- Since 31 < 35, update high = mid - 1 = 6.
4. Third Calculation:
mid = 5 + (6 - 5) / 2 = 5
- Value at index 5 is 31, which matches the target.
5. Result:
- The target value 31 is found at index 5.
Practical Examples and Visualizations
Understanding the binary search algorithm becomes much easier when you learn through examples, step-by-step simulations, pseudocode, and visual tools. These methods show how the search range keeps shrinking and how decisions are made at each comparison.
1. Pseudocode Demonstrations
Pseudocode provides a language-independent explanation of binary search logic. It helps students translate the concept into any programming language, such as C, C++, Java, or Python.
Key elements shown in pseudocode:
- Initialization of pointers (low, high)
- Midpoint calculation
- Comparison with the target
- Halving the search range
- Returning the result
Pseudocode is especially helpful when transitioning to real code implementations in C, Java, or Python.
2. Pictorial and Step-by-Step Visualizations
Visual representations demonstrate the functioning of binary search on a sorted array. They reveal:
- Current search boundaries
- The mid-position to be checked
- Range after the change
By observing every iteration, those who are learning get an understanding of how, with each comparison, the algorithm excludes half of the search space.
3. Language-Based Examples (C, C++, Java, Python)
The same binary search algorithm is implemented in different languages, but minor differences may be present in the implementation details.
Examples typically comprise:
- Binary search through loops (iterative)
- Binary search with recursion
- Invocation of the built-in methods like bisect in Python or binary_search() in C++
Presenting several languages at once helps the learners to compare syntaxes and understand how high-level languages optimise search operations.
4. Binary Search on the Answer
This is an advanced method where, instead of arrays, binary search is performed on the range of possible answers. It is a notable technique used in competitive programming and algorithmic problem-solving.
Common uses:
- Finding the least value that can work
- Verifying if a condition can be fulfilled
- Resolution of optimization issues through monotonic behaviour
Examples include:
- Finding the minimum time to complete tasks
- Maximum possible height or capacity under constraints
5. Leftmost and Rightmost Binary Search Variants
By extending binary search, it is possible to determine the:
- Leftmost occurrence of a value
- Rightmost occurrence of a value
These variations guarantee the correctness of results even in cases where arrays contain duplicate values.
Examples of use:
- Counting occurrences
- Range queries
- Finding boundaries in algorithms
6. Simulations and Power-of-2 Visualization
One may think of binary search as a succession of steps where each range is divided by powers of 2.
For instance:
Starting from 16 elements → 8 → 4 → 2 → 1
This is a way to explain the source of its time complexity O(log₂ n).
7. Real-World Tool Example: Git Bisect
git bisect embodies the binary search concept to figure out the commit that caused the bug.
Git bisect process:
- The developer identifies a good commit and a bad commit
- Git tests the commit halfway
- The search space is cut in half until the commit with the bug is located
It is a demonstration of binary search working at a different level besides arrays and data structures.
Bottom Line
Examples, language-specific implementations, and visual simulations help learners understand not just how binary search algorithm works, but why it is so efficient. Visual walkthroughs and real-world tools like git bisect bring the concept to life.
Binary Search Methods in C
1. Iterative Method
The iterative method uses a loop to repeatedly narrow the search range, following the same logic used in a binary search in C program, until the target element is found or the search range becomes empty.
Code Example:
#include <stdio.h>
int binarySearch(int arr[], int size, int target) {
int low = 0, high = size - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == target)
return mid;
else if (arr[mid] < target)
low = mid + 1;
else
high = mid - 1;
}
return -1;
}
int main() {
int numbers[] = {2, 5, 8, 12, 16, 23, 38, 45, 56, 72};
int target = 23;
int n = sizeof(numbers) / sizeof(numbers[0]);
int index = binarySearch(numbers, n, target);
if (index != -1)
printf("Element found at index: %d\n", index);
else
printf("Element not found in the array.\n");
return 0;
}
Explanation:
The code above looks for a number in a sorted array using the binary search algorithm. It starts with the full array and keeps cutting the search range in half based on whether the middle value is too small or too big. It repeats this until it finds the number or runs out of options.
Output:
Element found at index: 5
Time and Space Complexity:
- Time Complexity: O(log n)
- Space Complexity: O(1)
2. Recursive Method
In this approach, the function keeps calling itself with a smaller section of the array until it finds the element or the range becomes invalid, following the algorithm for binary search in C.
Code Example:
#include <stdio.h>
int binarySearchRecursive(int arr[], int low, int high, int target) {
if (low > high)
return -1;
int mid = low + (high - low) / 2;
if (arr[mid] == target)
return mid;
else if (arr[mid] < target)
return binarySearchRecursive(arr, mid + 1, high, target);
else
return binarySearchRecursive(arr, low, mid - 1, target);
}
int main() {
int numbers[] = {2, 5, 8, 12, 16, 23, 38, 45, 56, 72};
int n = sizeof(numbers) / sizeof(numbers[0]);
int target = 23;
int index = binarySearchRecursive(numbers, 0, n - 1, target);
if (index != -1)
printf("Element found at index: %d\n", index);
else
printf("Element not found in the array.\n");
return 0;
}
Explanation:
This version of the binary search algorithm uses recursion to divide the array into smaller parts. It keeps checking the middle element and calls itself on the left or right half, depending on whether the target is smaller or larger than the middle value. This continues until the value is found or the range is empty.
Output:
Element found at index: 5
Time and Space Complexity:
- Time Complexity: O(log n)
- Space Complexity: O(log n) (because of recursive calls stored in the call stack)
Summary
Binary search in C is classically divided into recursive and iterative implementations. The iterative approach works with loops and hence has a better space complexity of O(1). The recursive approach finds the solution by dividing the problem into smaller subproblems with each recursive call and is more intuitive, though it requires more stack space (O(log n)). Both methods use the same principle of dividing the search interval in half until the element is found or the interval is empty.
Comparison of Binary Search Algorithm with Other Search Algorithms
Binary search is quite an effective searching method to have at one's disposal, but its efficiency and applicability depend on how well it compares to other common search methods. Knowing those differences would make it a lot easier to pick the right algorithm for any problem you face.
| Search Technique |
Works On |
Time Complexity |
Key Characteristics |
How It Compares to Binary Search |
| Linear Search |
Sorted or unsorted arrays |
O(n) |
Checks elements one by one; simple to implement. |
Much slower than binary search for large datasets; useful only for small or unsorted data. |
| Binary Search |
Sorted arrays |
O(log n) |
Divides the search range in half at each step; predictable and efficient. |
Requires sorted data; significantly faster than linear search. |
| Binary Search Tree (BST) Search |
Tree structure (not arrays) |
O(log n) average, O(n) worst |
Supports fast insert, delete, and search operations; performance depends on tree balance. |
More flexible for dynamic data; binary search on arrays is more predictable but less flexible. |
| Hashing (Hash Tables) |
Unsorted data |
O(1) average |
Provides instant access based on key hashing; does not preserve order. |
Faster for direct lookups, but cannot perform range queries like binary search. |
| Interpolation Search |
Sorted, uniformly distributed data |
O(log log n) average, O(n) worst |
Estimates target position based on values; efficient on uniform datasets. |
Faster than binary search in ideal cases, but less reliable when data distribution varies. |
| Jump Search |
Sorted arrays |
O(√n) |
Skips elements in fixed steps, then performs linear search. |
Slower than binary search; uses more comparisons overall. |
| Fibonacci Search |
Sorted arrays |
O(log n) |
Uses Fibonacci numbers to divide the search space; helpful on systems where division is expensive. |
Similar speed to binary search; slightly more complex to implement. |
| Exponential Search |
Sorted arrays |
O(log n) |
Quickly finds a range where the element may lie, then applies binary search. |
Useful for unbounded or very large lists; complements binary search. |
| B-Trees |
Disk-based datasets (databases, filesystems) |
O(log n) |
Optimized for read/write on secondary storage; balanced at all times. |
More practical for large disk-based systems; binary search is better for in-memory arrays. |
| van Emde Boas Trees |
Specialized ordered sets |
O(log log n) |
Extremely fast predecessor/successor queries. |
Faster than binary search but used rarely due to complexity and memory needs. |
| Bloom Filters |
Probabilistic structures |
O(1) |
Fast membership checks with possible false positives. |
Not an exact search method; complements binary search, not replaces it. |
| Fractional Cascading |
Multiple related lists |
Varies |
Speeds up repeated searches across structured datasets. |
Enhances binary search efficiency when searching multiple lists. |
A thorough understanding of binary search in C program includes not just how it works, but also how efficiently it runs under various conditions. This section covers time and space complexity, best/average/worst-case scenarios, and practical factors that affect real-world performance.
Time Complexity
O(1) — The target value is found at the very first middle element checked.
O(log n) — Each comparison halves the search interval, so the number of steps grows logarithmically with the input size.
O(log n) — The code keeps splitting the array until there are no elements left or only one element remains in the interval.
Space Complexity
O(1) for the iterative method (only a few variables are used). O(log n) for the recursive method due to the recursive call stack.
Word RAM Model:<br>According to the theoretical word RAM model, the space complexity is still O(1) because only a constant number of variables are required.
Performance Considerations
With binary search fewer comparisons are performed, however, if the comparison of elements is an expensive operation (e.g. long strings or complex objects), it can become a bottleneck.
Binary search tends to access memory locations that are far apart in large arrays, hence it may not be very cache-friendly in comparison to linear search. Consequently, the performance of the former can be slower than that of the latter for very large datasets.
For quantum computers, there exist special algorithms that require fewer queries (e.g., O(√n)) to locate an item in sorted data, but a classical binary search is still the best choice for normal hardware.
This variant can optimize performance by precomputing search steps, but its practical benefit is limited on modern systems.
Summary Table
| Scenario |
Iterative Method |
Recursive Method |
| Time Complexity |
O(log n) |
O(log n) |
| Space Complexity |
O(1) |
O(log n) |
Notes
- Best for static, sorted data: Binary search is most efficient when the array does not change frequently.
- Not ideal for linked lists: Because random access is required for efficiency.
- Practical limits: For small datasets, the difference between linear and binary search is negligible.
Advantages of Binary Search Algorithm
- High Efficiency (O(log n) Time Complexity)
Binary search drastically reduces the number of comparisons needed to find an element by halving the search range at each step, making it much faster than linear search for large datasets. - Fewer Comparisons
The algorithm eliminates large portions of the data in each iteration, resulting in significantly fewer comparisons than simple search methods. - Deterministic and Predictable
Binary search always follows the same logical steps, making its performance and behavior predictable regardless of the input data (as long as it’s sorted). - Simple Implementation for Static Data
For datasets that do not change frequently, binary search is easy to implement and maintain, providing reliable search results. - Widely Applicable to Many Problems
Beyond searching for exact values, binary search can be adapted for use in optimization problems, boundary-value searches, and as a core technique in advanced data structures.
Disadvantages of Binary Search Algorithm
- Requires Sorted Data
Binary search only works correctly if the data is sorted. If the array is unsorted, the results will be incorrect or unpredictable. - Not Efficient for Frequently Updated Data
Adding or removing elements from a sorted array entails keeping the sorted order which can be quite slow and resource consuming if the dataset is large and changes frequently. - Limited to Random Access Data Structures
Binary search works best on data structures that allow access in constant time (e.g. arrays). It cannot be used for linked lists or other structures that provide sequential access. - Potential for Subtle Implementation Bugs
Incorrectly handling edge cases, midpoint calculation (which may cause overflow), or loop conditions can cause the program to run indefinitely or to fail to find the target. - Less Effective for Small Datasets
In the situation of very small arrays, the overhead of binary search might not be enough to provide a significant advantage over simple methods such as linear search which can be faster due to less setup and logic overhead.
Note: These points mark both the capabilities and the limitations of the binary search algorithm, thus assisting in the decision of when and how to employ it effectively
Implementation Issues and Best Practices
Though implementing binary search may look simple, there are a number of common traps, edge cases, and situations that may lead to wrong results or subtle bugs. Here are key issues to watch for and best practices to follow:
1. Correct Midpoint Calculation
One of the main reasons of errors in binary search is the way the midpoint is computed. If you calculate mid = (low + high) / 2 it may result in integer overflow when low and high are large. The more secure way is:
Best Practice:
Use mid = low + (high - low) / 2 is safer from overflow than the other formula.
2. Loop Termination and Exit Conditions
Incorrect loop conditions may bring about infinite loops or failure to find the target value, particularly for edge cases.
Best Practice:
The loop should be performed while low <= high (for iterative versions). Also the exit condition is there to guide the unsuccessful searches by returning a distinctive sentinel value (like -1).
3. Handling Edge Cases
The binary searching algorithm must also be able to handle arrays of 0 and 1 and the cases when the target is at the edges (the first or the last elements) or is missing completely.
Best Practice:
Verify the correctness of your implementation with tests on empty, single-element arrays, and targets at both ends.
4. Search Space Updates
Improper updating of low and high after comparisons can result in skipping the valid elements or missing matches, mainly when duplicates exist, or you are searching for the first/last occurrences.
Best Practice:
After arr[mid] < target,
set low = mid + 1;
after arr[mid] > target,
set high = mid - 1
For variants (like finding the first or last occurrence), adjust the update logic accordingly.
5. Sorted Array Requirement
Binary search only works on sorted arrays. Applying it to unsorted data will produce unpredictable results.
Best Practice:
Always verify or enforce that the input array is sorted before applying binary search.
6. Debugging with Tools Like git bisect
Binary search principles are used in debugging tools such as git bisect, which helps quickly isolate the commit that introduced a bug by repeatedly halving the search space.
7. Handling Boundary-Value Challenges
Most of the time binary search is utilized for the resolution of boundary problems (e.g., how to find the smallest/largest value to meet a condition). In these cases, off-by-one errors are frequently encountered.
Best Practice:
Think about which border (low or high) is inclusive/exclusive and be very careful. Also, test best-case and worst-case scenarios thoroughly.
8. Unsuccessful Search
Specify in detail what your function is expected to return in case of the absence of a target. The return of an invalid index or an ambiguous value may cause bugs at a later stage.
Best Practice:
Apply -1 or some other unambiguous marker to represent that the search was unsuccessful.
Quick Summary
- Employ a safe midpoint formula (mid = low + (high - low) / 2) to prevent an overflow.
- Ensure that the loop condition (low <= high) is there to stop infinite loops or missed targets.
- Consider edge cases such as empty arrays, single-element arrays, and boundary targets.
- Make sure you update low and high in a way that you do not skip valid elements.
- Remember that binary search should only be done on sorted data if you want to get the correct results.
- When dealing with boundary-based problems, be careful with off-by-one errors.
- If the target is not found, return a clear indicator (e.g., -1).
Variations and Advanced Techniques
Binary search forms a versatile base for a wide range of advanced searching techniques and adjustments. Here are the most important variations and the techniques that go far beyond just looking for an exact value in a simple way.
1. Lower Bound and Upper Bound Searches
- lower_bound: It locates the first position where the insertion of a value can be done without disturbing the sorting order (i.e., the first element that is not less than the target).
- upper_bound: It locates the first position that is strictly greater than the target value.
- equal_range: It returns the range of indices where the target value is located (a nice feature for arrays with duplicates).
These are a must for problems that include approximate matching or counting the number of occurrences.
2. Searching on Arbitrary Predicates
Binary search may be changed to work with arbitrary predicates—for instance, to locate the smallest index where a condition becomes true. This is very common in optimization and scheduling problems, where you look for the boundary value that meets a custom rule.
3. Binary Search on Unbounded Lists
If the list length is unknown or the list is infinite, you should first apply exponential search to locate a target-containing interval and then carry out binary search within that interval.
4. Uniform Binary Search
A variant which determines the steps in advance and employs a lookup table for the sequence of indices to be checked, thereby, it can be computation overhead reduction in some environments.
5. Bisection Method (Continuous Domains)
The bisection method uses the idea of binary search to continuous domains (e.g. finding roots of real-valued functions). The method does not search for discrete indices, but it narrows down the interval where a function changes sign, gradually converging on a solution by using midpoints. .
6. Noisy Binary Search
In situations where comparisons may be unreliable (e.g., due to measurement error), noisy binary search and related randomized algorithms are used. These approaches employ repeated queries or probabilistic logic to increase the likelihood of finding the correct answer.
- The Rényi-Ulam game is a theoretical model for searching with a known error probability in responses.
7. Binary Search on the Answer
A very strong pattern for optimization: instead of looking for a value in an array, you look for the minimal (or maximal) value that fulfils a certain condition, quite often with the use of an arbitrary predicate in the search.
8. Advanced Data Structures
- Unbounded lists: Ways of dealing with lists whose size is not known.
- Uniform binary search: It lessens the repeated calculations that occur in fixed-size searches.
Key Takeaway
Binary search is not just a simple value lookup. Its different forms can be employed to solve boundary issues, handle duplicates, work with lists of unknown size, be operation on continuous domains, and even be deal with noisy or uncertain comparisons. These sophisticated techniques make binary search a potent tool for optimization, mathematical computations, and complex algorithmic problem-solving.
Applications and Use Cases of Binary Search
Binary search is not just the typical algorithm taught in textbooks; it is a valid and widely utilized solution in the field of computer science and real-world systems. Below are some of the most common and significantly impactful applications and use cases of binary search:
1. Searching in Sorted Arrays
The most typical usage of binary search is to rapidly find a particular value in a sorted array or list. This is absolutely necessary in the applications where large datasets are required to be efficiently queried, for instance, searching a record in a sorted database table or looking up a word in a digital dictionary.
2. Database Indexing and Symbol Tables
Binary search is the main concept of various database indexing techniques. Structures like B-trees and symbol tables depend on binary search principles to make-rapid look-up, insertion, and deletion of records feasible. This is what makes data retrieval in databases and programming language compilers both fast and scalable.
3. Debugging and Version Control
One of the uses of binary search is found in git bisect that leverages the binary search method to signify the commit that caused a bug in a fast way. Through the process of repeatedly dividing the commit history, developers can find the source of the problem with fewer checks than a linear review.
4. File Systems and Libraries
The use of binary search is popular among operating systems and software libraries for efficient file lookups in sorted directories or symbol tables. This is especially helpful when there is a huge number of files or symbols as it keeps the access time at a minimum.
5. Network Routing and IP Lookup
Routers and network devices implement binary search to locate the IP addresses that correspond to sorted routing tables. It is what allows packet delivery to be fast and accurate even when the routing tables become big in size.
6. Advanced Data Structures
Many complex data structures such as binary search trees, self-balancing trees, and the fractional cascading technique are based on the binary search idea. These structures become possible to do efficiently searching, updating, and range queries in complex applications.
7. Competitive Programming and Optimization Problems
In algorithmic problem-solving, binary search is generally employed to locate boundary values (such as minimum or maximum feasible solutions) in optimization problems. This method which is called "binary search on the answer" is one of the main points in competitive programming.
8. Machine Learning and Parameter Tuning
Binary search is a great help in hyperparameter adjustment like selecting the best learning rate or threshold for a machine learning model. By gradually limiting the possible value range, it greatly speeds up the process of experimentation and model optimization.
Conclusion
The binary search algorithm provides a fast and structured approach to locating elements in sorted arrays. With its ability to reduce the search field drastically, it's far superior to linear search in performance. C allows this to be implemented via both iterative and recursive methods, giving flexibility in how you structure your code.
Even though C doesn't have a built-in binary search like Java, the raw and manual implementation, which is the algorithm for binary search in C, can be very efficient and instructive. In spite of its shortcomings, such as the need for sorted data, binary search is still at the core of many algorithms and systems that handle large-scale data searching.
Points to Remember
- Binary search is a method that can only be applied to sorted data and it cuts down the search space by half with each step.
- An iterative binary search uses less memory whereas a recursive one is more understandable.
- The algorithm always yields O(log n) time complexity which makes it the perfect choice for large datasets.
- Make sure you always calculate the midpoint in a way that does not cause overflow errors.
- Binary search can also be complicated further by cases such as lower/upper bound, binary search on the answer, and optimization problems.
- Real-world systems such as databases, compilers, networking, and debugging tools are built upon binary search principles.
Frequently Asked Questions
1. Can binary search be used on unsorted arrays?
No, binary search only works when the array is sorted. This is because the method relies on checking the middle value and deciding whether to search the left or right half. Without a sorted order, it can't correctly determine where to look next.
2. Where is binary search used in real life?
Binary search shows up in many areas, like database lookups, dictionary word searches, and finding values in sorted lists. It’s also used in some efficient algorithms, such as those for calculating square roots or finding peak values in data.
3. What’s the difference between iterative and recursive binary search?
In iterative binary search, a loop is used to shrink the search range step by step. Recursive binary search does the same, but it calls itself with updated boundaries until it finds the target or runs out of places to search.
4. How can you tell if a problem is right for binary search?
If the data is sorted or if the possible answers form a clear pattern (like being always increasing or decreasing), binary search is probably the right tool to use. It has the capability of finding the exact answer in no time.
5. What are the time and space complexities of binary search?
Binary search has a time complexity of O(log n), whether it's done iteratively or recursively. The space complexity is O(1) for the iterative version, while the recursive version uses O(log n) space due to the function call stack.
6. What are some common variations of binary search problems?
There are many twists on binary search, like finding the first or last time a number appears, handling rotated sorted arrays, finding the nearest smaller or larger value, or even searching in arrays that are almost sorted.
7. What is a binary search in C program and why is it used?
A binary search in C program is a method used to quickly find an element in a sorted array by repeatedly dividing the search range in half. It is used because it significantly reduces the number of comparisons, achieving a fast time complexity of O(log n), making it much more efficient than linear search for large datasets.