Data Structures Using C++ 2E
Chapter 9
Searching Algorithms
Objectives
• Learn the various search algorithms
• Explore how to implement the sequential and binary
search algorithms
• Discover how the sequential and binary search
algorithms perform
• Become aware of the lower bound on comparison-
based search algorithms
Data Structures Using C++ 2E 2
Search Algorithms
• Item key
– Unique member of the item
– Used in searching, sorting, insertion, deletion
• Number of key comparisons
– Comparing the key of the search item with the key of
an item in the list
• We can use class arrayListType (Chapter 3)
– For easy reference
– Implements a list and basic operations in an array
Data Structures Using C++ 2E 3
Sequential Search
• Array-based lists
– Covered in Chapter 3
• Linked lists
– Covered in Chapter 5
• Works the same for array-based lists and linked lists
• See code on page 499
Data Structures Using C++ 2E 4
Sequential Search Analysis
• Sequential search algorithm performance
– Examine worst case and average case
– Count number of key comparisons
• Unsuccessful search
– Search item not in list
– Make n comparisons
• Conducting algorithm performance analysis
– Best case: make one key comparison
– Worst case: algorithm makes n comparisons
Data Structures Using C++ 2E 5
Sequential Search Analysis (cont’d.)
• Determining the average number of comparisons
– Consider all possible cases
– Find number of comparisons for each case
– Add number of comparisons, divide by number of
cases
Data Structures Using C++ 2E 6
Sequential Search Analysis (cont’d.)
• Determining the average number of comparisons
(cont’d.)
Data Structures Using C++ 2E 7
Sequential Search Analysis (cont’d.)
Data Structures Using C++ 2E
Ordered Lists
• Elements ordered according to some criteria
– Usually, ascending order
• Operations
– Same as those on an unordered list
• Determining if list is empty or full, determining list
length, printing the list, clearing the list
• Defining ordered list as an abstract data type (ADT)
– Use inheritance to derive the class to implement the
ordered lists from class arrayListType
– Define two classes
Data Structures Using C++ 2E 9
Ordered Lists (cont’d.)
Data Structures Using C++ 2E 10
Binary Search
• Performed only on ordered lists
• Uses divide-and-conquer technique
• Example: Determine if 75 is in the list:
FIGURE 9-1 List of length 12
FIGURE 9-2 Search list, list[0]...list[11]
FIGURE 9-3 Search list, list[6]...list[11]
Data Structures Using C++ 2E 11
Binary Search (cont’d.)
• C++ function implementing binary search algorithm
Data Structures Using C++ 2E 12
Binary Search (cont’d.)
• Example 9-1
FIGURE 9-4 Sorted list for a binary search
TABLE 9-1 Values of first, last, and mid and the
number of comparisons for search item 89
Data Structures Using C++ 2E 13
Binary Search (cont’d.)
TABLE 9-2 Values of first, last, and mid and the
number of comparisons for search item 34
TABLE 9-3 Values of first, last, and mid and the
number of comparisons for search item 22
Running time of binary search is:
T(n)= O(log2n) = O(lgn)
Data Structures Using C++ 2E 14
Insertion into an Ordered List
• After insertion: resulting list must be ordered
– Find place in the list to insert item
• Use algorithm similar to binary search algorithm
– Slide list elements one array position down to make
room for the item to be inserted
– Insert the item
• Use function insertAt (class arrayListType)
Data Structures Using C++ 2E 15
Insertion into an Ordered List (cont’d.)
• Algorithm to insert the item
• Function insertOrd implements algorithm
Data Structures Using C++ 2E 16
Data Structures Using C++ 2E 17
Insertion into an Ordered List (cont’d.)
• Add binary search algorithm and the insertOrd
algorithm to the class orderedArrayListType
Data Structures Using C++ 2E 18
Insertion into an Ordered List (cont’d.)
• class orderedArrayListType
– Derived from class arrayListType
– List elements of orderedArrayListType
• Ordered
• Must override functions insertAt and insertEnd
of class arrayListType in class
orderedArrayListType
– If these functions are used by an object of type
orderedArrayListType, list elements will remain
in order
Data Structures Using C++ 2E 19
Insertion into an Ordered List (cont’d.)
• Can also override function seqSearch
– Perform sequential search on an ordered list
• Takes into account that elements are ordered
Data Structures Using C++ 2E 20
Sequential Search vs Binary Search
• Number of comparisons for a list of length 1024=210
– Sequential search : 1024 at most
– Binary search : 2*11=22 at most
• Time complexity
– Sequential search : O(n)
– Binary search: <2log(n+1)> O(logn)
Data Structures Using C++ 2E 21
Lower Bound on Comparison-Based
Search Algorithms
• Comparison-based search algorithms
– Search list by comparing target element with list
elements
• Sequential search: order n
• Binary search: order log2n
Data Structures Using C++ 2E 22
Lower Bound on Comparison-Based
Search Algorithms (cont’d.)
• Devising a search algorithm with order less than
log2n
– Obtain lower bound on number of comparisons
• Cannot be comparison based
Data Structures Using C++ 2E 23
Summary
• Sequential search
– Order n
• Ordered lists
– Elements ordered according to some criteria
• Binary search
– Order log2n
Data Structures Using C++ 2E 24
Programming Exercises
• Chapter 9 – Exercise 1
• Chapter 9 – Exercise 2
Data Structures Using C++ 2E 25