Top Banner
C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector
60

C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Mar 30, 2015

Download

Documents

Jocelyn Beals
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

C++ Programming: From Problem Analysis to Program Design, Fifth Edition

Chapter 10: Applications of Arrays and the class

vector

Page 2: 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

Page 3: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 4: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Searching

• Sequential search algorithm

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 4

Page 5: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 6: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 7: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 8: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 9: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Bubble Sort (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 9

Page 10: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Bubble Sort (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 10

Page 11: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Bubble Sort (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 11

Page 12: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Bubble Sort (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 12

Page 13: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Bubble Sort (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 13

Page 14: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 15: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 16: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Selection Sort (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 16

Page 17: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Selection Sort (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 17

Page 18: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 19: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Selection Sort (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 19

Page 20: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 21: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Insertion Sort

• Sorts the list by moving each element to its proper place

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 21

Page 22: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 23: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 23

Insertion Sort (cont'd.)

Page 24: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 24

Insertion Sort (cont'd.)

Page 25: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 26: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Insertion Sort (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 26

Page 27: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 28: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 29: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Binary Search (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 29

Page 30: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Binary Search (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 30

Page 31: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Binary Search (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 31

Page 32: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 33: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 34: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 35: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

vector type (class) (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 35

Page 36: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

vector type (class) (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 36

Page 37: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 37

vector type (class) (cont'd.)

Page 38: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

vector type (class) (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 38

Page 39: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 40: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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:

Page 41: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 42: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 43: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 44: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 45: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Programming Example: Problem Analysis (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 45

Page 46: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 47: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Programming Example: Function getCandidatesName()

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 47

Page 48: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Programming Example: Function sortCandidateName()

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 48

Page 49: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Programming Example: Function initialize()

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 49

Page 50: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 51: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 52: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Programming Example: Function binSearch()

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 52

Page 53: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Programming Example: Function processVotes()

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 53

Page 54: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Programming Example: Function addRegionsVote()

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 54

Page 55: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

Programming Example: Function printHeading()

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 55

Page 56: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 57: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 58: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 59: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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

Page 60: C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 10: Applications of Arrays and the class vector.

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