Title: C Programming: From Problem Analysis to Program Design, Fifth Edition
1C Programming From Problem Analysis to Program
Design, Fifth Edition
- Chapter 10
Applications of Arrays and the class vector
2Objectives
- 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
3List 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
4Searching
- Sequential search algorithm
5Searching (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
6Searching (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
7Bubble Sort
- list0...listn - 1
- List of n elements, indexed 0 to n - 1
8Bubble Sort (cont'd.)
- Series of n - 1 iterations
- Successive elements listindex and listindex
1 of list are compared - If listindex gt listindex 1
- Elements listindex and listindex 1 are
swapped - Smaller elements move toward the top
- Larger elements move toward the bottom
9Bubble Sort (cont'd.)
10Bubble Sort (cont'd.)
11Bubble Sort (cont'd.)
12Bubble Sort (cont'd.)
13Bubble Sort (cont'd.)
14Bubble 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
15Selection 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
16Selection Sort (cont'd.)
17Selection Sort (cont'd.)
18Selection 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
19Selection Sort (cont'd.)
20Selection 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
21Insertion Sort
- Sorts the list by moving each element to its
proper place
22Insertion Sort (cont'd.)
- Consider the element list4
- First element of unsorted list
- list4 lt list3
- Move list4 to proper location
- At list2
23Insertion Sort (cont'd.)
24Insertion Sort (cont'd.)
25Insertion Sort (cont'd.)
- During the sorting phase
- Array containing the list is divided into two
sublists sorted and unsorted
26Insertion Sort (cont'd.)
27Insertion 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
28Binary 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
29Binary Search (cont'd.)
30Binary Search (cont'd.)
31Binary Search (cont'd.)
32Performance 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
33Performance of Binary Search (cont'd.)
- List of length n
- Maximum number comparisons 2log2n 2
34vector 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
35vector type (class) (cont'd.)
36vector type (class) (cont'd.)
37vector type (class) (cont'd.)
38vector type (class) (cont'd.)
39Programming 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
40Programming Example Election Results (cont'd.)
- Voting is reported in the following form
41Programming 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
42Programming 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
43Programming 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
44Programming Example Problem Analysis (cont'd.)
- Data type of a candidates 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
45Programming Example Problem Analysis (cont'd.)
46Programming 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
47Programming Example Function getCandidatesName()
48Programming Example Function sortCandidateName()
49Programming Example Function initialize()
50Programming 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
51Programming Example Process Voting Data (cont'd.)
- Update the appropriate entry in the array
votesByRegion by adding the numberOfVotesForTheCan
didate
52Programming Example Function binSearch()
53Programming Example Function processVotes()
54Programming Example Function addRegionsVote()
55Programming Example Function printHeading()
56Programming Example Function printResults()
- Initialize sumVotes, largestVotes, and winLoc to
0 - For each row in each array
- Output the final lines of output
57Programming 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
58Programming 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
59Programming 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
60Summary
- 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