📖 Scenario: Imagine you have a list of book titles sorted alphabetically on a shelf. You want to find if a certain book is there without checking every single book one by one.
🎯 Goal: You will build a simple program that uses the idea of binary search on a sorted list of book titles to quickly find if a book is present.
📋 What You'll Learn
Create a sorted list of book titles
Set a target book title to search for
Use a binary search approach to find the target book
Print the result showing if the book was found or not
💡 Why This Matters
🌍 Real World
Searching quickly in sorted data like phone books, dictionaries, or product lists saves time and effort.
💼 Career
Binary search is a fundamental algorithm used in software development, data analysis, and many technical roles to optimize search operations.
Progress0 / 4 steps
1
Create a sorted list of book titles
Create a list called books with these exact titles in alphabetical order: 'Algorithms', 'Data Structures', 'Machine Learning', 'Python', 'Web Development'
DSA Python
Hint
Remember to put the book titles inside square brackets [] and in quotes.
2
Set the target book title to search for
Create a variable called target and set it to the string 'Python'
DSA Python
Hint
Use quotes around the book title string.
3
Use binary search to find the target book
Write code to perform binary search on the books list to check if target is present. Use variables left, right, and mid to track the search range and middle index. Set a variable found to True if the book is found, otherwise False.
DSA Python
Hint
Use a while loop to narrow down the search range until you find the book or the range is empty.
4
Print the search result
Write a print statement that outputs "Book found!" if found is True, otherwise print "Book not found."
DSA Python
Hint
Use an if statement to check the found variable and print the correct message.
Practice
(1/5)
1. Why is binary search only applicable on a sorted list?
easy
A. Because it divides the search space based on order to find elements quickly
B. Because it can search any list regardless of order
C. Because it uses random guessing to find elements
D. Because it checks every element one by one
Solution
Step 1: Understand binary search method
Binary search works by repeatedly dividing the list into halves and deciding which half to search next based on order.
Step 2: Importance of sorted order
If the list is not sorted, we cannot decide which half to discard, so binary search fails.
Final Answer:
Because it divides the search space based on order to find elements quickly -> Option A
Quick Check:
Binary search needs sorted list = Because it divides the search space based on order to find elements quickly [OK]
Hint: Binary search needs order to skip halves fast [OK]
Common Mistakes:
Thinking binary search works on unsorted lists
Confusing binary search with linear search
Believing binary search guesses randomly
2. Which of the following is the correct syntax to perform binary search using Python's bisect module on a sorted list arr to find position of x?
easy
A. pos = bisect.find(arr, x)
B. pos = bisect.search(arr, x)
C. pos = bisect.bisect_left(arr, x)
D. pos = bisect.index(arr, x)
Solution
Step 1: Recall bisect module functions
The bisect module provides bisect_left to find insertion position for x in sorted arr.
Step 2: Check options for correct function
Only bisect_left is valid; others like search, find, index do not exist in bisect.
Final Answer:
pos = bisect.bisect_left(arr, x) -> Option C
Quick Check:
bisect_left finds position = pos = bisect.bisect_left(arr, x) [OK]
Hint: Use bisect_left for binary search position in Python [OK]
Common Mistakes:
Using non-existent bisect functions
Confusing bisect with list methods
Trying to use bisect on unsorted lists
3. What will be the output of the following code?
arr = [2, 4, 6, 8, 10]
left, right = 0, len(arr) - 1
x = 6
while left <= right:
mid = (left + right) // 2
if arr[mid] == x:
print(mid)
break
elif arr[mid] < x:
left = mid + 1
else:
right = mid - 1
else:
print(-1)
medium
A. 2
B. 3
C. -1
D. 0
Solution
Step 1: Trace binary search steps
Initial left=0, right=4, mid=2 (value 6). Since arr[mid] == x, print mid=2 and break.
Step 2: Confirm output
The loop breaks after printing 2, so output is 2.
Final Answer:
2 -> Option A
Quick Check:
Index of 6 in arr is 2 [OK]
Hint: Check mid index value equals target to stop [OK]
Common Mistakes:
Miscomputing mid index
Confusing index with value
Forgetting to break loop on find
4. The following code is intended to perform binary search on a sorted list nums to find target. What is the error?
def binary_search(nums, target):
left, right = 0, len(nums)
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
medium
A. left should start from 1 instead of 0
B. right should be initialized as len(nums) - 1
C. mid calculation should be (left - right) // 2
D. The loop condition should be while left < right
Solution
Step 1: Check initialization of right pointer
right is set to len(nums), which is out of index range since list indices go from 0 to len(nums)-1.
Step 2: Correct right initialization
right should be len(nums) - 1 to avoid index error when accessing nums[mid].
Final Answer:
right should be initialized as len(nums) - 1 -> Option B
Quick Check:
Index max = len(nums)-1 [OK]
Hint: Right pointer max index is length minus one [OK]
Common Mistakes:
Setting right to length causes index error
Changing left start incorrectly
Wrong mid calculation formula
5. You have a sorted list of unique integers representing book IDs: books = [101, 203, 305, 407, 509]. You want to find the position to insert a new book ID 400 so the list remains sorted. Which approach correctly finds the insertion index using binary search logic?
hard
A. Use linear search to find first element greater than 400 and insert before it
B. Insert 400 at the end always because list is sorted
C. Insert 400 at index 0 always to keep list sorted
D. Check middle element; if less than 400, move right pointer; else move left pointer until left > right, then insert at left
Solution
Step 1: Understand binary search insertion logic
Binary search narrows down where to insert by comparing middle element with target and adjusting pointers.
Step 2: Apply logic to find insertion index
When left pointer passes right, left is the correct insertion index to keep list sorted.
Final Answer:
Check middle element; if less than 400, move right pointer; else move left pointer until left > right, then insert at left -> Option D
Quick Check:
Binary search insertion index = Check middle element; if less than 400, move right pointer; else move left pointer until left > right, then insert at left [OK]
Hint: Insert at left pointer after binary search ends [OK]
Common Mistakes:
Inserting at wrong fixed position
Using linear search instead of binary
Not updating pointers correctly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.