Chapter 8 - Searching and Sorting Arrays: Starting Out With C++, 3 Edition
Chapter 8 - Searching and Sorting Arrays: Starting Out With C++, 3 Edition
Arrays
1
Starting Out with C++, 3rd Edition
8.1 Introduction to Search Algorithms
2
Starting Out with C++, 3rd Edition
The Linear Search
3
Starting Out with C++, 3rd Edition
Program 8-1
// This program demonstrates the searchList function, which
// performs a linear search on an integer array.
#include <iostream.h>
// Function prototype
int searchList(int [], int, int);
void main(void)
{
int tests[arrSize] = {87, 75, 98, 100, 82};
int results;
4
Starting Out with C++, 3rd Edition
Program continues
results = searchList(tests, arrSize, 100);
if (results == -1)
cout << "You did not earn 100 points on any test\n";
else
{
cout << "You earned 100 points on test ";
cout << (results + 1) << endl;
}
}
5
Starting Out with C++, 3rd Edition
Program continues
// The searchList function performs a linear search on an
// integer array. The array list, which has a maximum of numElems
// elements, is searched for the number stored in value. If the
// number is found, its array subscript is returned. Otherwise,
// -1 is returned indicating the value was not in the array.
6
Starting Out with C++, 3rd Edition
Program Output
7
Starting Out with C++, 3rd Edition
Efficiency of the Linear Search
9
Starting Out with C++, 3rd Edition
Program 8-2
// This program demonstrates the binarySearch function, which
// performs a binary search on an integer array.
#include <iostream.h>
// Function prototype
int binarySearch(int [], int, int);
void main(void)
{
int tests[arrSize] = {101, 142, 147, 189, 199, 207, 222,
234, 289, 296, 310, 319, 388, 394,
417, 429, 447, 521, 536, 600};
10
Starting Out with C++, 3rd Edition
Program continues
int results, empID;
cout << "Enter the Employee ID you wish to search for: ";
cin >> empID;
results = binarySearch(tests, arrSize, empID);
if (results == -1)
cout << "That number does not exist in the array.\n";
else
{
cout << "That ID is found at element " << results;
cout << " in the array\n";
}
}
11
Starting Out with C++, 3rd Edition
Program continues
// The binarySearch function performs a binary search on an integer array. Array,
// which has a maximum of numElems elements, is searched for the number
// stored in value. If the number is found, its array subscript is returned.
// Otherwise, -1 is returned indicating the value was not in the array.
12
Starting Out with C++, 3rd Edition
Program Output with Example Input
13
Starting Out with C++, 3rd Edition
Efficiency of the Binary Search
14
Starting Out with C++, 3rd Edition
8.3 Focus on Software Engineering:
Introduction to Sorting Algorithms
• Sorting algorithms are used to arrange
random data into some order
15
Starting Out with C++, 3rd Edition
The Bubble Sort
• An easy way to arrange data in ascending or
descending order.
• Pseudocode:
Do
Set count variable to 0
For count is set to each subscript in Array from 0 to the next-to-last
subscript
If array[count] is greater than array[count+1]
swap them
set swap flag to true
end if
End for
While any elements have been swapped.
16
Starting Out with C++, 3rd Edition
Program 8-4
// This program uses the bubble sort algorithm to sort an
// array in ascending order.
#include <iostream.h>
// Function prototypes
void sortArray(int [], int);
void showArray(int [], int);
void main(void)
{
int values[6] = {7, 2, 3, 8, 9, 1};
cout << "The unsorted values are:\n";
showArray(values, 6);
sortArray(values, 6);
cout << "The sorted values are:\n";
showArray(values, 6);
}
17
Starting Out with C++, 3rd Edition
Program continues
// Definition of function sortArray. This function performs an ascending
// order bubble sort on Array. elems is the number of elements in the array.
18
Starting Out with C++, 3rd Edition
Program continues
// Definition of function showArray.
// This function displays the contents of array. elems is the
// number of elements.
19
Starting Out with C++, 3rd Edition
Program Output
20
Starting Out with C++, 3rd Edition
The Selection Sort
21
Starting Out with C++, 3rd Edition
Selection Sort Pseudocode:
For Start is set to each subscript in Array from 0 through the next-to-last subscript
Set Index variable to Start
Set minIndex variable to Start
Set minValue variable to array[Start]
For Index is set to each subscript in Array from Start+1 through the next-to-last
subscript
If array[Index] is less than minValue
Set minValue to array[Index]
Set minIndex to Index
End if
Increment Index
End For
Set array[minIndex] to array[Start]
Set array[Start] to minValue
End For
22
Starting Out with C++, 3rd Edition
Program 8-5
// This program uses the selection sort algorithm to sort an
// array in ascending order.
#include <iostream.h>
// Function prototypes
void selectionSort(int [], int);
void showArray(int [], int);
void main(void)
{
int values[6] = {5, 7, 2, 8, 9, 1};
23
Starting Out with C++, 3rd Edition
Program continues
// Definition of function selectionSort. This function performs an
// ascending order selection sort on Array. elems is the number of
// elements in the array.
24
Starting Out with C++, 3rd Edition
Program continues
// Definition of function showArray.
// This function displays the contents of Array. elems is the
// number of elements.
25
Starting Out with C++, 3rd Edition
Program Output
26
Starting Out with C++, 3rd Edition
8.5 Sorting and Searching vectors
(Continued from Section 7.13)
27
Starting Out with C++, 3rd Edition
Program 8-7
// This program produces a sales report for the Demetris
// Leadership Center. This version of the program uses
// STL vectors instead of arrays.
#include <iostream.h>
#include <iomanip.h>
#include <vector> // Needed to declare vectors
using namespace std; // vectors are in the std namespace
// Function prototypes
void initVectors(vector<int> &, vector<int> &, vector<float> &);
void calcSales(vector<int>, vector<float>, vector<float> &);
void showOrder(vector<float>, vector<int>);
void dualSort(vector<int> &, vector<float> &);
void showTotals(vector<float>, vector<int>);
void main(void)
{
vector<int> id;
vector<int> units;
vector<float> prices;
vector<float> sales;
28
Starting Out with C++, 3rd Edition
Program 8-7 (continued)
// Must provide an initialization routine.
initVectors(id, units, prices);
// Calculate and sort the sales totals,
// and display the results.
calcSales(units, prices, sales);
dualSort(id, sales);
cout.precision(2);
cout.setf(ios::fixed | ios::showpoint);
showOrder(sales, id);
showTotals(sales, units);
}
//******************************************************************
// Definition of initVectors. Accepts id, units, and prices *
// vectors as reference arguments. This function initializes each *
// vector to a set of starting values. *
//******************************************************************
29
Starting Out with C++, 3rd Edition
Program 8-7 (continued)
void initVectors(vector<int> &id, vector<int> &units,
vector<float> &prices)
{
// Initialize the id vector
for (int value = 914; value <= 922; value++)
id.push_back(value);
// Initialize the units vector
units.push_back(842);
units.push_back(416);
units.push_back(127);
units.push_back(514);
units.push_back(437);
units.push_back(269);
units.push_back(97);
units.push_back(492);
units.push_back(212);
30
Starting Out with C++, 3rd Edition
Program 8-7 (continued)
// Initialize the prices vector
prices.push_back(12.95);
prices.push_back(14.95);
prices.push_back(18.95);
prices.push_back(16.95);
prices.push_back(21.95);
prices.push_back(31.95);
prices.push_back(14.95);
prices.push_back(14.95);
prices.push_back(16.95);
}
//****************************************************************
// Definition of calcSales. Accepts units, prices, and sales *
// vectors as arguments. The sales vector is passed into a *
// reference parameter. This function calculates each product's *
// sales by multiplying its units sold by each unit's price. The *
// result is stored in the sales vector. *
//****************************************************************
31
Starting Out with C++, 3rd Edition
Program 8-7 (continued)
void calcSales(vector<int> units, vector<float> prices,
vector<float> &sales)
{
for (int index = 0; index < units.size(); index++)
sales.push_back(units[index] * prices[index]);
}
//****************************************************************
// Definition of function dualSort. Accepts id and sales vectors *
// as reference arguments. This function performs a descending *
// order selection sort on the sales vector. The elements of the *
// id vector are exchanged identically as those of the sales *
// vector. *
//****************************************************************
void dualSort(vector<int> &id, vector<float> &sales)
{
int startScan, maxIndex, tempid, elems;
float maxValue;
32
Starting Out with C++, 3rd Edition
Program 8-7 (continued)
elems = id.size();
for (startScan = 0; startScan < (elems - 1); startScan++)
{
maxIndex = startScan;
maxValue = sales[startScan];
tempid = id[startScan];
for(int index = startScan + 1; index < elems; index++)
{
if (sales[index] > maxValue)
{
maxValue = sales[index];
tempid = id[index];
maxIndex = index;
}
}
sales[maxIndex] = sales[startScan];
id[maxIndex] = id[startScan];
sales[startScan] = maxValue;
id[startScan] = tempid;
}
}
33
Starting Out with C++, 3rd Edition
Program 8-7 (continued)
//*****************************************************************
// Definition of showOrder function. Accepts sales and id vectors *
// as arguments. The function first displays a heading, then the *
// sorted list of product numbers and sales. *
//*****************************************************************
void showOrder(vector<float> sales, vector<int> id)
{
cout << "Product number\tsales\n";
cout << "----------------------------------\n";
for (int index = 0; index < id.size(); index++)
{
cout << id[index] << "\t\t$";
cout << setw(8) << sales[index] << endl;
}
cout << endl;
}
34
Starting Out with C++, 3rd Edition
Program 8-7 (continued)
//*******************************************************************
// Definition of showTotals function. Accepts sales and id vectors *
// as arguments. The function first calculates the total units (of *
// all products) sold and the total sales. It then displays these *
// amounts. *
//*******************************************************************
void showTotals(vector<float> sales, vector<int> units)
{
int totalUnits = 0;
float totalSales = 0.0;
for (int index = 0; index < units.size(); index++)
{
totalUnits += units[index];
totalSales += sales[index];
}
cout << "Total units Sold: " << totalUnits << endl;
cout << "Total sales: $" << totalSales << endl;
}
35
Starting Out with C++, 3rd Edition
Program 8-7 (continued)
Program Output
Product number sales
----------------------------------
914 $10903.90
918 $ 9592.15
917 $ 8712.30
919 $ 8594.55
921 $ 7355.40
915 $ 6219.20
922 $ 3593.40
916 $ 2406.65
920 $ 1450.15
Total units Sold: 3406
Total sales: $58827.70
36
Starting Out with C++, 3rd Edition