C++ Programming: Program Design Including Data Structures

Download Report

Transcript C++ Programming: Program Design Including Data Structures

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
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 (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
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:
– 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 stream
C++ 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