C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector
Mar 30, 2015
C++ Programming: From Problem Analysis to Program Design, Fifth Edition
Chapter 10: Applications of Arrays and the class
vector
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 900th 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
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.)
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 (n2 + 3n – 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 has1048576 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 2log2n + 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– 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
C++ Programming: From Problem Analysis to Program Design, Fifth Edition 37
vector type (class) (cont'd.)
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.)
• Desired output:
C++ Programming: From Problem Analysis to Program Design, Fifth Edition 40
• Voting is reported in the following form:
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:– candData.txt consists of the names of
candidates– voteData.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 candidatesName
• Sort the array candidatesName• Initialize the arrays votesByRegion and totalVotes
• 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 getCandidatesName()
C++ Programming: From Problem Analysis to Program Design, Fifth Edition 47
Programming Example: Function sortCandidateName()
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 candidateName, regionNumber, and numberOfVotesForTheCandidate
• Find the row number in the array candidatesName that corresponds to this candidate– This gives the corresponding row number in the
array votesByRegion for this candidate
• Find the column in the array votesByRegion that corresponds to the regionNumber
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 votesByRegion by adding the numberOfVotesForTheCandidate
C++ Programming: From Problem Analysis to Program Design, Fifth Edition 51
Programming Example: Function binSearch()
C++ Programming: From Problem Analysis to Program Design, Fifth Edition 52
Programming Example: Function processVotes()
C++ Programming: From Problem Analysis to Program Design, Fifth Edition 53
Programming Example: Function addRegionsVote()
C++ Programming: From Problem Analysis to Program Design, Fifth Edition 54
Programming Example: Function printHeading()
C++ Programming: From Problem Analysis to Program Design, Fifth Edition 55
Programming Example: Function printResults()
• Initialize sumVotes, largestVotes, and winLoc 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 candData.txt• If the input file does not exist, exit the
program
• Read the data from the file candData.txt into the array candidatesName
• Sort the array candidatesName• Close the file candData.txt and clear the
input streamC++ Programming: From Problem Analysis to Program Design, Fifth Edition 57
Programming Example: Main Algorithm (cont'd.)
• Open the input file voteData.txt• If the input file does not exist, exit the
program
• Initialize the arrays votesByRegion and totalVotes
• Process the voting data and store the results in the array votesByRegion
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 totalVotes
• 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