C Programming From Problem Analysis to Program Design
C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays (Searching and Sorting) and the vector Type
Objectives In this chapter, you will: • Explore how to sort an array using the bubble sort, selection sort, and insertion sort algorithms • Learn how to implement the binary search algorithm • Become familiar with the vector type C++ Programming: From Problem Analysis to Program Design, Fifth Edition 2
List Processing • List: a collection of values of the same type • Basic list operations: – Search the list for a given item – Sort the list – Insert an item in the list – Delete an item from the list – Print the list C++ Programming: From Problem Analysis to Program Design, Fifth Edition 3
Searching • Sequential search algorithm C++ Programming: From Problem Analysis to Program Design, Fifth Edition 4
Searching (cont'd. ) • List with 1000 elements – Search item is the second item • Sequential search makes two key comparisons – Search item is the 900 th item • Sequential search makes 900 key comparisons – Search item is not in the list • Sequential search makes 1000 key comparisons C++ Programming: From Problem Analysis to Program Design, Fifth Edition 5
Searching (cont'd. ) • Sequential search – Not very efficient for large lists – On average, number of key comparisons equal to half the size of the list – Does not assume that the list is sorted C++ Programming: From Problem Analysis to Program Design, Fifth Edition 6
Bubble Sort • list[0]. . . list[n - 1] – List of n elements, indexed 0 to n - 1 C++ Programming: From Problem Analysis to Program Design, Fifth Edition 7
Bubble Sort (cont'd. ) • Series of n - 1 iterations – Successive elements list[index] and list[index + 1] of list are compared – If list[index] > list[index + 1] • Elements list[index] and list[index + 1] are swapped • Smaller elements move toward the top • Larger elements move toward the bottom C++ Programming: From Problem Analysis to Program Design, Fifth Edition 8
Bubble Sort (cont'd. ) C++ Programming: From Problem Analysis to Program Design, Fifth Edition 9
Bubble Sort (cont'd. ) C++ Programming: From Problem Analysis to Program Design, Fifth Edition 10
Bubble Sort (cont'd. ) C++ Programming: From Problem Analysis to Program Design, Fifth Edition 11
Bubble Sort (cont'd. ) C++ Programming: From Problem Analysis to Program Design, Fifth Edition 12
Bubble Sort (cont'd. ) C++ Programming: From Problem Analysis to Program Design, Fifth Edition 13
Bubble Sort (cont'd. ) • List of length n – Exactly n(n - 1) / 2 key comparisons – On average n(n - 1) / 4 item assignments • n = 1000 – 500, 000 key comparisons – 250, 000 item assignments C++ Programming: From Problem Analysis to Program Design, Fifth Edition 14
Selection Sort • Rearrange the list by selecting an element in the list and moving it to its proper position • Finds the location of the smallest element in the unsorted portion of the list – Moves it to the top of the unsorted portion of the list C++ Programming: From Problem Analysis to Program Design, Fifth Edition 15
Selection Sort (cont'd. ) C++ Programming: From Problem Analysis to Program Design, Fifth Edition 16
Selection Sort (cont'd. ) C++ Programming: From Problem Analysis to Program Design, Fifth Edition 17
Selection Sort (cont'd. ) • In the unsorted portion of the list: – Find the location of the smallest element – Move the smallest element to the beginning of the unsorted list C++ Programming: From Problem Analysis to Program Design, Fifth Edition 18
Selection Sort (cont'd. ) C++ Programming: From Problem Analysis to Program Design, Fifth Edition 19
Selection Sort (cont'd. ) • List of length n – Exactly n(n - 1) / 2 key comparisons – 3(n - 1) item assignments • n = 1000 – 500, 000 key comparisons – 3000 item assignments C++ Programming: From Problem Analysis to Program Design, Fifth Edition 20
Insertion Sort • Sorts the list by moving each element to its proper place C++ Programming: From Problem Analysis to Program Design, Fifth Edition 21
Insertion Sort (cont'd. ) • Consider the element list[4] – First element of unsorted list – list[4] < list[3] • Move list[4] to proper location • At list[2] C++ Programming: From Problem Analysis to Program Design, Fifth Edition 22
Insertion Sort (cont'd. ) C++ Programming: From Problem Analysis to Program Design, Fifth Edition 23
Insertion Sort (cont'd. ) C++ Programming: From Problem Analysis to Program Design, Fifth Edition 24
Insertion Sort (cont'd. ) • During the sorting phase – Array containing the list is divided into two sublists: sorted and unsorted C++ Programming: From Problem Analysis to Program Design, Fifth Edition 25
Insertion Sort (cont'd. ) C++ Programming: From Problem Analysis to Program Design, Fifth Edition 26
Insertion Sort (cont'd. ) • List of length n – About (n 2 + 3 n – 4) / 4 key comparisons – About n(n – 1) / 4 item assignments • n = 1000 – 250, 000 key comparisons – 250, 000 item assignments C++ Programming: From Problem Analysis to Program Design, Fifth Edition 27
Binary Search • • Much faster than a sequential search List must be sorted “Divide and conquer” Compare search item with middle element – Less than middle: search only upper half of list – More than middle: search only lower half of list C++ Programming: From Problem Analysis to Program Design, Fifth Edition 28
Binary Search (cont'd. ) C++ Programming: From Problem Analysis to Program Design, Fifth Edition 29
Binary Search (cont'd. ) C++ Programming: From Problem Analysis to Program Design, Fifth Edition 30
Binary Search (cont'd. ) C++ Programming: From Problem Analysis to Program Design, Fifth Edition 31
Performance of Binary Search • L is a sorted list of size 1024 – Every iteration of the while loop cuts the size of the search list by half – At most, 11 iterations to determine whether x is in L – Binary search will make 22 comparisons at most • L has 1048576 elements – Binary search makes 42 item comparisons at most C++ Programming: From Problem Analysis to Program Design, Fifth Edition 32
Performance of Binary Search (cont'd. ) • List of length n – Maximum number comparisons 2 log 2 n + 2 C++ Programming: From Problem Analysis to Program Design, Fifth Edition 33
vector type (class) • Only a fixed number of elements can be stored in an array • Inserting and removing elements causes shifting • vector type implements a list – vector container – vector object – object C++ Programming: From Problem Analysis to Program Design, Fifth Edition 34
vector type (class) (cont'd. ) C++ Programming: From Problem Analysis to Program Design, Fifth Edition 35
vector type (class) (cont'd. ) C++ Programming: From Problem Analysis to Program Design, Fifth Edition 36
vector type (class) (cont'd. ) C++ Programming: From Problem Analysis to Program Design, Fifth Edition 37
vector type (class) (cont'd. ) C++ Programming: From Problem Analysis to Program Design, Fifth Edition 38
Programming Example: Election Results • Presidential election for the student council of your local university • Write a program to analyze the data and report the winner • Four major divisions labeled as Region 1, Region 2, Region 3, and Region 4 – Each division has several department – Each department manages its own voting process and directly reports the results to the election committee C++ Programming: From Problem Analysis to Program Design, Fifth Edition 39
Programming Example: Election Results (cont'd. ) • Voting is reported in the following form: • Desired output: C++ Programming: From Problem Analysis to Program Design, Fifth Edition 40
Programming Example: Election Results (cont'd. ) • Assume that six candidates are running – Program can be modified to accommodate any number of candidates • Data is provided in two files: – cand. Data. txt consists of the names of candidates – vote. Data. txt each line consists of voting results • One entry per line C++ Programming: From Problem Analysis to Program Design, Fifth Edition 41
Programming Example: Input and Output • Input: Two files, one containing the candidates’ names and the other containing the voting data • Output: election results in a tabular form and the winner C++ Programming: From Problem Analysis to Program Design, Fifth Edition 42
Programming Example: Problem Analysis • Program must organize the voting data by region • Program must calculate total number of votes received by each candidate as well as the total votes cast in the election • Names of the candidates must appear in alphabetical order C++ Programming: From Problem Analysis to Program Design, Fifth Edition 43
Programming Example: Problem Analysis (cont'd. ) • Data type of a candidate’s name and number of votes are different – Separate arrays • Use a two-dimensional array to hold the next four columns of the output • One-dimensional array to hold the total votes received by each candidate C++ Programming: From Problem Analysis to Program Design, Fifth Edition 44
Programming Example: Problem Analysis (cont'd. ) C++ Programming: From Problem Analysis to Program Design, Fifth Edition 45
Programming Example: Algorithm Design • Read the candidates’ names into the array candidates. Name • Sort the array candidates. Name • Initialize the arrays votes. By. Region and total. Votes • Process the voting data • Calculate the total votes received by each candidate • Output the results C++ Programming: From Problem Analysis to Program Design, Fifth Edition 46
Programming Example: Function get. Candidates. Name() C++ Programming: From Problem Analysis to Program Design, Fifth Edition 47
Programming Example: Function sort. Candidate. Name() C++ Programming: From Problem Analysis to Program Design, Fifth Edition 48
Programming Example: Function initialize() C++ Programming: From Problem Analysis to Program Design, Fifth Edition 49
Programming Example: Process Voting Data • Get a candidate. Name, region. Number, and number. Of. Votes. For. The. Candidate • Find the row number in the array candidates. Name that corresponds to this candidate – This gives the corresponding row number in the array votes. By. Region for this candidate • Find the column in the array votes. By. Region that corresponds to the region. Number C++ Programming: From Problem Analysis to Program Design, Fifth Edition 50
Programming Example: Process Voting Data (cont'd. ) • Update the appropriate entry in the array votes. By. Region by adding the number. Of. Votes. For. The. Candidate C++ Programming: From Problem Analysis to Program Design, Fifth Edition 51
Programming Example: Function bin. Search() C++ Programming: From Problem Analysis to Program Design, Fifth Edition 52
Programming Example: Function process. Votes() C++ Programming: From Problem Analysis to Program Design, Fifth Edition 53
Programming Example: Function add. Regions. Vote() C++ Programming: From Problem Analysis to Program Design, Fifth Edition 54
Programming Example: Function print. Heading() C++ Programming: From Problem Analysis to Program Design, Fifth Edition 55
Programming Example: Function print. Results() • Initialize sum. Votes, largest. Votes, and win. Loc to 0 • For each row in each array: • Output the final lines of output C++ Programming: From Problem Analysis to Program Design, Fifth Edition 56
Programming Example: Main Algorithm • Declare the variables • Open the input file cand. Data. txt • If the input file does not exist, exit the program • Read the data from the file cand. Data. txt into the array candidates. Name • Sort the array candidates. Name • Close the file cand. Data. txt and clear the input stream C++ Programming: From Problem Analysis to Program Design, Fifth Edition 57
Programming Example: Main Algorithm (cont'd. ) • Open the input file vote. Data. txt • If the input file does not exist, exit the program • Initialize the arrays votes. By. Region and total. Votes • Process the voting data and store the results in the array votes. By. Region C++ Programming: From Problem Analysis to Program Design, Fifth Edition 58
Programming Example: Main Algorithm (cont'd. ) • Calculate the number of total votes received by each candidate and store the results in the array total. Votes • Print the heading • Print the results C++ Programming: From Problem Analysis to Program Design, Fifth Edition 59
Summary • List – Set of elements of the same type • Sorting algorithms – Bubble sort – Selection sort – Insertion sort • Binary search – Compare performance to sequential search • vector type C++ Programming: From Problem Analysis to Program Design, Fifth Edition 60
- Slides: 60