Chapter 8 Searching and Sorting Arrays 1 Starting




































- Slides: 36

Chapter 8 – Searching and Sorting Arrays 1 Starting Out with C++, 3 rd Edition

8. 1 Introduction to Search Algorithms • A search algorithm is a method of locating a specific item of information in a larger collection of data. This section discusses two algorithms for searching the contents of an array. 2 Starting Out with C++, 3 rd Edition

The Linear Search • This is a very simple algorithm. • It uses a loop to sequentially step through an array, starting with the first element. • It compares each element with the value being searched for and stops when that value is found or the end of the array is reached. 3 Starting Out with C++, 3 rd Edition

Program 8 -1 // This program demonstrates the search. List function, which // performs a linear search on an integer array. #include <iostream. h> // Function prototype int search. List(int [], int); const int arr. Size = 5; void main(void) { int tests[arr. Size] = {87, 75, 98, 100, 82}; int results; 4 Starting Out with C++, 3 rd Edition

Program continues results = search. List(tests, arr. Size, 100); if (results == -1) cout << "You did not earn 100 points on any testn"; else { cout << "You earned 100 points on test "; cout << (results + 1) << endl; } } 5 Starting Out with C++, 3 rd Edition

Program continues // // // The search. List function performs a linear search on an integer array. The array list, which has a maximum of num. Elems 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. int search. List(int list[], int num. Elems, int value) { int index = 0; // Used as a subscript to search array int position = -1; // To record position of search value bool found = false; // Flag to indicate if the value was found while (index < num. Elelments && !found) { if (list[count] == value) { found = true; position = index; } index++; } return position; } 6 Starting Out with C++, 3 rd Edition

Program Output You earned 100 points on test 4 7 Starting Out with C++, 3 rd Edition

Efficiency of the Linear Search • The advantage is its simplicity. – It is easy to understand – Easy to implement – Does not require the array to be in order • The disadvantage is its inefficiency – If there are 20, 000 items in the array and what you are looking for is in the 19, 999 th element, you need to search through the entire list. 8 Starting Out with C++, 3 rd Edition

Binary Search • The binary search is much more efficient than the linear search. • It requires the list to be in order. • The algorithm starts searching with the middle element. – If the item is less than the middle element, it starts over searching the first half of the list. – If the item is greater than the middle element, the search starts over starting with the middle element in the second half of the list. – It then continues halving the list until the item is found. 9 Starting Out with C++, 3 rd Edition

Program 8 -2 // This program demonstrates the binary. Search function, which // performs a binary search on an integer array. #include <iostream. h> // Function prototype int binary. Search(int [], int); const int arr. Size = 20; void main(void) { int tests[arr. Size] = {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++, 3 rd Edition

Program continues int results, emp. ID; cout << "Enter the Employee ID you wish to search for: "; cin >> emp. ID; results = binary. Search(tests, arr. Size, emp. ID); 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 arrayn"; } } 11 Starting Out with C++, 3 rd Edition

Program continues // // The binary. Search function performs a binary search on an integer array. Array, which has a maximum of num. Elems 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. int binary. Search(int array[], int numelems, int value) { int first = 0, last = numelems - 1, middle, position = -1; bool found = false; while (!found && first <= last) { middle = (first + last) / 2; // Calculate mid point if (array[middle] == value) // If value is found at mid { found = true; position = middle; } else if (array[middle] > value) // If value is in lower half last = middle - 1; else first = middle + 1; // If value is in upper half } return position; } 12 Starting Out with C++, 3 rd Edition

Program Output with Example Input Enter the Employee ID you wish to search for: 199 That ID is found at element 4 in the array. 13 Starting Out with C++, 3 rd Edition

Efficiency of the Binary Search • Much more efficient than the linear search. 14 Starting Out with C++, 3 rd 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++, 3 rd 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++, 3 rd Edition

Program 8 -4 // This program uses the bubble sort algorithm to sort an // array in ascending order. #include <iostream. h> // Function prototypes void sort. Array(int [], int); void show. Array(int [], int); void main(void) { int values[6] = {7, 2, 3, 8, 9, 1}; cout << "The unsorted values are: n"; show. Array(values, 6); sort. Array(values, 6); cout << "The sorted values are: n"; show. Array(values, 6); } 17 Starting Out with C++, 3 rd Edition

Program continues // Definition of function sort. Array. This function performs an ascending // order bubble sort on Array. elems is the number of elements in the array. void sort. Array(int array[], int elems) { int swap, temp; do { swap = 0; for (int count = 0; count < (elems - 1); count++) { if (array[count] > array[count + 1]) { temp = array[count]; array[count] = array[count + 1]; array[count + 1] = temp; swap = 1; } } } while (swap != 0); } 18 Starting Out with C++, 3 rd Edition

Program continues // Definition of function show. Array. // This function displays the contents of array. elems is the // number of elements. void show. Array(int array[], int elems) { for (int count = 0; count < elems; count++) cout << array[count] << " "; cout << endl; } 19 Starting Out with C++, 3 rd Edition

Program Output The unsorted values are: 723891 The sorted values are: 123789 20 Starting Out with C++, 3 rd Edition

The Selection Sort • The bubble sort is inefficient for large arrays because items only move by one element at a time. • The selection sort moves items immediately to their final position in the array so it makes fewer exchanges. 21 Starting Out with C++, 3 rd 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 min. Value 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 min. Value Set min. Value to array[Index] Set min. Index to Index End if Increment Index End For Set array[min. Index] to array[Start] Set array[Start] to min. Value End For 22 Starting Out with C++, 3 rd Edition

Program 8 -5 // This program uses the selection sort algorithm to sort an // array in ascending order. #include <iostream. h> // Function prototypes void selection. Sort(int [], int); void show. Array(int [], int); void main(void) { int values[6] = {5, 7, 2, 8, 9, 1}; cout << "The unsorted values aren"; show. Array(values, 6); selection. Sort(values, 6); cout << "The sorted values aren"; show. Array(values, 6); } 23 Starting Out with C++, 3 rd Edition

Program continues // Definition of function selection. Sort. This function performs an // ascending order selection sort on Array. elems is the number of // elements in the array. void selection. Sort(int array[], int elems) { int start. Scan, min. Index, min. Value; for (start. Scan = 0; start. Scan < (elems - 1); start. Scan++) { min. Index = start. Scan; min. Value = array[start. Scan]; for(int index = start. Scan + 1; index < elems; index++) { if (array[index] < min. Value) { min. Value = array[index]; min. Index = index; } } array[min. Index] = array[start. Scan]; array[start. Scan] = min. Value; } } 24 Starting Out with C++, 3 rd Edition

Program continues // Definition of function show. Array. // This function displays the contents of Array. elems is the // number of elements. void show. Array(int array[], int elems) { for (int count = 0; count < elems; count++) cout << array[count] << " "; cout << endl; } 25 Starting Out with C++, 3 rd Edition

Program Output The unsorted values are 572891 The sorted values are 125789 26 Starting Out with C++, 3 rd Edition

8. 5 Sorting and Searching vectors (Continued from Section 7. 13) • The sorting and searching algorithms presented in this chapter may also be used with vectors. 27 Starting Out with C++, 3 rd 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> using namespace std; // Needed to declare vectors // vectors are in the std namespace // Function prototypes void init. Vectors(vector<int> &, vector<float> &); void calc. Sales(vector<int>, vector<float> &); void show. Order(vector<float>, vector<int>); void dual. Sort(vector<int> &, vector<float> &); void show. Totals(vector<float>, vector<int>); void main(void) { vector<int> id; vector<int> units; vector<float> prices; vector<float> sales; 28 Starting Out with C++, 3 rd Edition

Program 8 -7 (continued) // Must provide an initialization routine. init. Vectors(id, units, prices); // Calculate and sort the sales totals, // and display the results. calc. Sales(units, prices, sales); dual. Sort(id, sales); cout. precision(2); cout. setf(ios: : fixed | ios: : showpoint); show. Order(sales, id); show. Totals(sales, units); } //********************************* // Definition of init. Vectors. 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++, 3 rd Edition

Program 8 -7 (continued) void init. Vectors(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++, 3 rd 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(16. 95); } //******************************** // Definition of calc. Sales. 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++, 3 rd Edition

Program 8 -7 (continued) void calc. Sales(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 dual. Sort. 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 dual. Sort(vector<int> &id, vector<float> &sales) { int start. Scan, max. Index, tempid, elems; float max. Value; 32 Starting Out with C++, 3 rd Edition

Program 8 -7 (continued) elems = id. size(); for (start. Scan = 0; start. Scan < (elems - 1); start. Scan++) { max. Index = start. Scan; max. Value = sales[start. Scan]; tempid = id[start. Scan]; for(int index = start. Scan + 1; index < elems; index++) { if (sales[index] > max. Value) { max. Value = sales[index]; tempid = id[index]; max. Index = index; } } sales[max. Index] = sales[start. Scan]; id[max. Index] = id[start. Scan]; sales[start. Scan] = max. Value; id[start. Scan] = tempid; } } 33 Starting Out with C++, 3 rd Edition

Program 8 -7 (continued) //********************************* // Definition of show. Order function. Accepts sales and id vectors * // as arguments. The function first displays a heading, then the * // sorted list of product numbers and sales. * //********************************* void show. Order(vector<float> sales, vector<int> id) { cout << "Product numbertsalesn"; cout << "-----------------n"; for (int index = 0; index < id. size(); index++) { cout << id[index] << "tt$"; cout << setw(8) << sales[index] << endl; } cout << endl; } 34 Starting Out with C++, 3 rd Edition

Program 8 -7 (continued) //********************************** // Definition of show. Totals 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 show. Totals(vector<float> sales, vector<int> units) { int total. Units = 0; float total. Sales = 0. 0; for (int index = 0; index < units. size(); index++) { total. Units += units[index]; total. Sales += sales[index]; } cout << "Total units Sold: " << total. Units << endl; cout << "Total sales: $" << total. Sales << endl; } 35 Starting Out with C++, 3 rd 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++, 3 rd Edition
Searching and sorting arrays in c++
Big oh java
Searching and sorting in java
Searching and sorting java
Searching and sorting in java
What is internal and external sorting
Algoritma searching dan sorting
Bentuk kombinasi antara sorting dan searching adalah
Performing basic maneuvers chapter 4
Chapter 6 entrepreneurship and starting a small business
Chapter 6 entrepreneurship and starting a small business
Chapter 6 entrepreneurship and starting a small business
Chapter 6 entrepreneurship and starting a small business
Dynamic arrays and amortized analysis
Disadvantages of array
Chapter 30 engine starting systems
Chapter 1 starting a proprietorship
Parallel arrays python
Array of arrays c++
Parallel arrays
Partially filled arrays
C++ parallel arrays
Why do we need arrays?
Arreglos unidimensionales java
Arrays bidimensionales java
Mips array example
Polynomial representation using arrays
Assembly array of strings
Global arrays in c
Computer science arrays
Arrays visual basic
Python parallel arrays
I wonder is it possible
Pascal 2d array
Mips arrays
Creating arrays matlab
Adt of array