📖 Scenario: You have a sorted list of book titles in a library catalog. You want to find if a particular book is available quickly without checking every title one by one.
🎯 Goal: Build a program that uses binary search to find if a book title exists in the sorted list by dividing the search area in half repeatedly.
📋 What You'll Learn
Create a sorted list of book titles
Set the target book title to search for
Implement binary search using divide and conquer approach
Print the result showing if the book was found or not
💡 Why This Matters
🌍 Real World
Binary search is used in many applications like searching in phone contacts, dictionaries, or any sorted data to find items quickly.
💼 Career
Understanding binary search helps in software development roles where efficient data searching and algorithm optimization are important.
Progress0 / 4 steps
1
Create a sorted list of book titles
Create a list called books with these exact titles in this order: 'Algorithms', 'Data Structures', 'Machine Learning', 'Python', 'Software Engineering'
DSA Python
Hint
Use square brackets [] to create the list and separate titles with commas.
2
Set the target book title to search for
Create a variable called target and set it to the string 'Python'
DSA Python
Hint
Assign the string 'Python' to the variable target.
3
Implement binary search using divide and conquer
Write a function called binary_search that takes arr and target as parameters. Use variables low and high to track the search range. Use a while loop with condition low <= high. Calculate mid as the middle index. Compare arr[mid] with target. If equal, return mid. If arr[mid] is less than target, set low = mid + 1. Else set high = mid - 1. If not found, return -1.
DSA Python
Hint
Use a while loop and update low and high to narrow down the search area.
4
Print the result of the binary search
Call binary_search with books and target. Store the result in index. Then print "Found at index:" followed by index if index is not -1. Otherwise print "Not found".
DSA Python
Hint
Use an if statement to check if index is -1 or not, then print accordingly.
Practice
(1/5)
1. What is the main idea behind Binary Search as a divide and conquer algorithm?
easy
A. It uses random guesses to find the target quickly.
B. It searches every element one by one until it finds the target.
C. It divides the search range in half each time to find the target efficiently.
D. It sorts the array before searching for the target.
Solution
Step 1: Understand divide and conquer in binary search
Binary search splits the sorted list into two halves and decides which half to search next.
Step 2: How binary search reduces search space
By halving the search range each time, it quickly narrows down where the target could be.
Final Answer:
It divides the search range in half each time to find the target efficiently. -> Option C
Quick Check:
Divide and conquer = halve search space [OK]
Hint: Binary search halves the search space each step [OK]
Common Mistakes:
Thinking binary search checks every element
Assuming binary search works on unsorted lists
Confusing binary search with linear search
2. Which of the following is the correct Python syntax to calculate the middle index in binary search for a list named arr with indices low and high?
easy
A. mid = (low + high) // 2
B. mid = (low + high) / 2
C. mid = low + high
D. mid = low - high // 2
Solution
Step 1: Understand integer division for index calculation
We need an integer index, so floor division (//) is used to get the middle index.
Step 2: Check each option for correctness
mid = (low + high) // 2 uses floor division correctly. mid = (low + high) / 2 uses float division, which is invalid for indexing. Options C and D do not calculate the middle index properly.
Final Answer:
mid = (low + high) // 2 -> Option A
Quick Check:
Use floor division for middle index [OK]
Hint: Use // for integer middle index in Python [OK]
Common Mistakes:
Using / which gives float index
Adding indices without dividing
Incorrect operator precedence
3. What will be the output of the following Python code?
A. Change 'high = len(arr)' to 'high = len(arr) - 1' to avoid index error.
B. Change 'low <= high' to 'low < high' to fix infinite loop.
C. Change 'mid = (low + high) // 2' to 'mid = (low + high + 1) // 2' for correct mid.
D. Remove 'return -1' to allow function to run longer.
Solution
Step 1: Check initialization of high index
Using 'high = len(arr)' causes out-of-range error because last valid index is len(arr) - 1.
Step 2: Correct high initialization
Set 'high = len(arr) - 1' to ensure mid index stays within valid range.
Final Answer:
Change 'high = len(arr)' to 'high = len(arr) - 1' to avoid index error. -> Option A
Quick Check:
High index must be last valid index [OK]
Hint: Set high to last index, not length [OK]
Common Mistakes:
Setting high to length causes index error
Changing loop condition incorrectly
Miscalculating mid index
5. Given a sorted list arr = [1, 3, 5, 7, 9, 11, 13], you want to find the smallest index where the value is greater than or equal to 8 using binary search. Which modification to the standard binary search will achieve this?
hard
A. Use linear search instead because binary search can't find this.
B. Adjust binary search to move 'high' to mid - 1 when arr[mid] >= 8, else move 'low' to mid + 1.
C. Return mid immediately when arr[mid] > 8 without further checks.
D. Modify binary search to always move 'low' to mid + 1 regardless of comparison.
Solution
Step 1: Understand the problem - find smallest index with value >= 8
This is a variant called lower bound search, requiring careful adjustment of pointers.
Step 2: Modify binary search to narrow down to smallest qualifying index
When arr[mid] >= 8, move 'high' to mid - 1 to check if smaller index also qualifies; else move 'low' to mid + 1.
Final Answer:
Adjust binary search to move 'high' to mid - 1 when arr[mid] >= 8, else move 'low' to mid + 1. -> Option B
Quick Check:
Lower bound search moves high left on >= condition [OK]
Hint: Move high left when mid value meets condition [OK]
Common Mistakes:
Returning immediately without checking smaller indices
Using linear search unnecessarily
Moving low pointer incorrectly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.