 2003 Prentice Hall, Inc. All rights reserved. Using Arrays in Abstract Data Types.

Slides:



Advertisements
Similar presentations
Arrays. Introduction Arrays –Structures of related data items –Static entity - same size throughout program A few types –C-like, pointer-based arrays.
Advertisements

 2003 Prentice Hall, Inc. All rights reserved. 1 Chapter 4 - Arrays Outline 4.1Introduction 4.2Arrays 4.3Declaring Arrays 4.4Examples Using Arrays 4.5Passing.
 2000 Prentice Hall, Inc. All rights reserved. 1 Chapter 4 - Arrays Outline 4.1Introduction 4.2Arrays 4.3Declaring Arrays 4.4Examples Using Arrays 4.5Passing.
 2003 Prentice Hall, Inc. All rights reserved Introduction Arrays –Structures of related data items –Static entity (same size throughout program)
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Chapter 6 - Arrays Outline 6.1Introduction 6.2Arrays.
Review (Week1) C++_ the unit of programming is the class from which objects are eventually instantiated. C++ classes contain functions that implement class.
 2000 Prentice Hall, Inc. All rights reserved. Chapter 6 - Arrays Outline 6.1Introduction 6.2Arrays 6.3Declaring Arrays 6.4Examples Using Arrays 6.5Passing.
 2003 Prentice Hall, Inc. All rights reserved. 1 Sorting Arrays Sorting data –Important computing application –Virtually every organization must sort.
 2003 Prentice Hall, Inc. All rights reserved. 1 Arrays –Structures of related data items –Static entity (same size throughout program) A few types –Pointer-based.
Chapter 6 C Arrays Acknowledgment The notes are adapted from those provided by Deitel & Associates, Inc. and Pearson Education Inc. Arrays are data structures.
 2003 Prentice Hall, Inc. All rights reserved Multiple-Subscripted Arrays Multiple subscripts –a[ i ][ j ] –Tables with rows and columns –Specify.
 2003 Prentice Hall, Inc. All rights reserved Sorting Arrays Sorting data –Important computing application –Virtually every organization must sort.
 2003 Prentice Hall, Inc. All rights reserved. 1 Chapter 4 - Arrays Outline 4.1Introduction 4.2Arrays 4.3Declaring Arrays 4.4Examples Using Arrays 4.5Passing.
 2007 Pearson Education, Inc. All rights reserved C Arrays.
4.1Introduction Arrays –Structures of related data items –Static entity (same size throughout program) A few types –Pointer-based arrays (C-like) –Arrays.
Arrays Multi-dimensional initialize & display Sample programs Sorting Searching Part II.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Chapter 6 - Arrays Outline 6.1Introduction 6.2Arrays.
1 Lecture 5: Part 1 Searching Arrays Searching Arrays: Linear Search and Binary Search Search array for a key value Linear search  Compare each.
 2003 Prentice Hall, Inc. All rights reserved. Using Arrays in Abstract Data Types.
CSC141- Introduction to Computer programming Teacher: AHMED MUMTAZ MUSTEHSAN Lecture – 19 Thanks for Lecture Slides:
 2003 Prentice Hall, Inc. All rights reserved. 1 Arrays Outline Examples Using Arrays Passing arrays to functions Class GradeBook: store student grades.
Algorithm and Programming Array Dr. Ir. Riri Fitri Sari MM MSc International Class Electrical Engineering Dept University of Indonesia 15 March 2009.
C Lecture Notes 1 Arrays Lecture 6. C Lecture Notes 2 6.1Introduction Arrays –Structures of related data items –Static entity – same size throughout program.
 2003 Prentice Hall, Inc. All rights reserved. Using Arrays in Abstract Data Types.
 2003 Prentice Hall, Inc. All rights reserved. 1 Arrays Outline Introduction Arrays Declaring Arrays Examples Using Arrays.
1 Arrays as Lists with examples. 2 Review Arrays –Structures of related data items of the same type –Data items (called array elements) are stored at.
 2003 Prentice Hall, Inc. All rights reserved. 1 Chapter 4 - Arrays Outline 4.1Introduction 4.2Arrays 4.3Declaring Arrays 4.4Examples Using Arrays 4.5Passing.
1 Lecture 8 Arrays Part II Sorting Arrays Sorting data  Important computing application  Virtually every organization must sort some data Massive.
1 CISC181 Introduction to Computer Science Dr. McCoy Lecture 13 October 13, 2009.
1 Chapter 4 - Arrays Outline 4.1Introduction 4.2Arrays 4.3Declaring Arrays 4.4Examples Using Arrays 4.5Passing Arrays to Functions 4.6Sorting Arrays 4.7Case.
Arrays Multi-dimensional initialize & display Sorting Part II.
 2000 Deitel & Associates, Inc. All rights reserved. Chapter 4 - Arrays Outline 4.1Introduction 4.2Arrays 4.3Declaring Arrays 4.4Examples Using Arrays.
Searching & Sorting Programming 2. Searching Searching is the process of determining if a target item is present in a list of items, and locating it A.
 2003 Prentice Hall, Inc. All rights reserved. 1 Vectors.
 2007 Pearson Education, Inc. All rights reserved C Arrays.
 2003 Prentice Hall, Inc. All rights reserved. 1 Arrays Outline Multidimensional Arrays Case Study: Computing Mean, Median and Mode Using Arrays.
 2003 Prentice Hall, Inc. All rights reserved. 1 Chapter 4 - Arrays Outline 4.1Introduction 4.2Arrays 4.3Declaring Arrays 4.4Examples Using Arrays 4.5Passing.
C Lecture Notes 1 Arrays (...cont.). C Lecture Notes 2 6.6Sorting Arrays Sorting data –Important computing application –Virtually every organization must.
 2003 Prentice Hall, Inc. All rights reserved. Outline 1 fig04_03.cpp (1 of 2) 1 // Fig. 4.3: fig04_03.cpp 2 // Initializing an array. 3 #include 4 5.
 2000 Prentice Hall, Inc. All rights reserved. 1 Chapter 4 - Arrays Outline 4.1Introduction 4.2Arrays 4.3Declaring Arrays 4.4Examples Using Arrays 4.5Passing.
1 Lecture 4: Part1 Arrays Introduction Arrays  Structures of related data items  Static entity (same size throughout program)
CHAPTER 3 ARRAYS Dr. Shady Yehia Elmashad. Outline 1.Introduction 2.Arrays 3.Declaring Arrays 4.Examples Using Arrays 5.Multidimensional Arrays 6.Multidimensional.
SIMPLE Sorting Sorting is a typical operation to put the elements in an array in order. Internal Sorts [for small data sets] selection bubble (exchange)
Dale Roberts Department of Computer and Information Science, School of Science, IUPUI CSCI N305 Arrays Case Study.
 2000 Prentice Hall, Inc. All rights reserved Arrays Array –Consecutive group of memory locations –Same name and type To refer to an element, specify.
CSC 113: C OMPUTER P ROGRAMMING (T HEORY = 03, L AB = 01) Computer Science Department Bahria University, Islamabad.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Arrays + Functions Outline 6.5Passing Arrays to Functions.
Chapter 4 - Arrays Outline 4.1 Introduction 4.2 Arrays
Arrays (Static) Introduction Data Structures Arrays Declaring Arrays
C++ Programming Lecture 15 Arrays – Part II
آرايه ها اصول كامپيوتر 1.
C++ Programming Lecture 15 Arrays – Part II
Using Arrays in Abstract Data Types
Chapter 6 - Arrays Outline 6.1 Introduction 6.2 Arrays
Arrays Kingdom of Saudi Arabia
Arrays as Lists with examples.
Arrays Outline Introduction Arrays Declaring Arrays
CISC181 Introduction to Computer Science Dr
Chapter 6 - Arrays Outline 6.1 Introduction 6.2 Arrays
4.1 Introduction Arrays A few types Structures of related data items
Chapter 4 - Arrays Outline 4.1 Introduction 4.2 Arrays
Chapter 4 - Arrays Outline 4.1 Introduction 4.2 Arrays
Chapter 4 - Arrays Outline 4.1 Introduction 4.2 Arrays
Capitolo 4 - Arrays Outline 4.1 Introduction 4.2 Arrays
Chapter 3 Arrays Dr. A. PHILIP AROKIADOSS Assistant Professor
Recursive Algorithms 1 Building a Ruler: drawRuler()
Vectors.
4.9 Multiple-Subscripted Arrays
ADT LIST So far we have seen the following operations on a “list”:
SIMPLE Sorting Sorting is a typical operation to put the elements in an array in order. Internal Sorts [for small data sets] selection bubble (exchange)
Presentation transcript:

 2003 Prentice Hall, Inc. All rights reserved. Using Arrays in Abstract Data Types

 2003 Prentice Hall, Inc. All rights reserved. What is an Abstract Data Type A built-in data type is an int, float, double, etc. An Abstract Data Type (ADT) is a collection of data and a set of operations on the data. You can use an ADT’s operations, if you know their specifications, without knowing how the operations are implemented or how the data is stored. Ultimately, you will implement an ADT with a data-structure, which is a construct you can define within a programming language to store a collection of data. Examples of ADT: lists, stacks, queues, trees, graphs, etc.

 2003 Prentice Hall, Inc. All rights reserved. ADT: SIMPLE LIST Examples of lists: lists of student id’s in a class, grocery items, lists of records in a collection, list of club members, etc…. Create a list Insert an element Arrange elements in sorted order Find if an element is in the list Delete an element Print the list of elements WHAT ARE BASIC OPERATIONS ON A LIST?

 2003 Prentice Hall, Inc. All rights reserved. What operations are likely to be performed on lists? Create/Insert an element Delete an element Arrange elements in sorted order (whatever sort criteria) Print the list of elements Find if an element is in the list Print statistics about list (if numeric) Grocery items: Chips Salsa Coke Tissues Sprite Jelly beans Original list Grocery items: Chips Salsa Coke Tissues Sprite Jelly beans Beer Add Beer Grocery items: Chips Salsa Coke Sprite Jelly beans Beer Delete tissues Grocery items: Beer Chips Coke Jelly beans Salsa Sprite Sort alphabetically Grocery items: Beer Coke Sprite Jelly beans Chips Salsa Sort by grocery aisles Is beer on the list?

 2003 Prentice Hall, Inc. All rights reserved. Implementation of the ADT List One way to implement a “list” is using an array to hold the elements in the list….. Now have to figure out how to : insert, delete, sort, find, etc…. In the next lessons, we will slowly build up these functionalities until we can integrate them all into a “list” program. EVENTUAL GOAL : CREATE A PROGRAM TO MAINTAIN A LIST OF STUDENTS……….

 2003 Prentice Hall, Inc. All rights reserved. Let’s make a simpler list Instead of strings, we will have a list of letters const int MAXCHARS = 7; char alpharray[MAXCHARS]; B J K M S Z

 2003 Prentice Hall, Inc. All rights reserved. Print Elements in a list for (i=0; i<numofelements; i++) cout << alpharray[i] << endl; Input elements into the list: // numtoinsert should be set to the number of initial elements to insert for (i=0; i<numtoinsert; i++) cin >> alpharray[i];

 2003 Prentice Hall, Inc. All rights reserved. Insert an element into an array Simple insert routine: find end of array, insert element: alpharray[endofarray] = newelement; endofarray++; B J K M S ZB J K M S Z L Before: After inserting L

 2003 Prentice Hall, Inc. All rights reserved. Insert a letter in the list Should it be inserted at the end of the list (in this case we need to know what is the end of the list)? Should the new element be inserted into the beginning of the list? Is the list stored in some special order and elements should be inserted to maintain that order – e.g., if the list is stored in alphabetical order the new element must be inserted in alphabetical order? Should the user choose where to store the new element?

 2003 Prentice Hall, Inc. All rights reserved. Assume the following letters are stored in array named alpharray: B, J, K, M, S, and Z. Write a program which calls a function adlet(), which accepts both the alphabet array and a new letter as parameters and inserts the new letter in the correct alphabetical order in the alphabet array. B J K M S Z alphabet [0] [1] [2] [3] [4] [5] [6] [7] …... B J K L M S Z After adding ‘L’ Before: INSERTING INTO A ARRAY BASED Alphabetical LIST

 2003 Prentice Hall, Inc. All rights reserved. ALGORITHM: Prompt user for new letter to add Find the position (index) of where this letter should go in the alphabetical array. (This is called a linear search.) Move all letters after this position down to free up the space Insert letter into array ****

 2003 Prentice Hall, Inc. All rights reserved. #include void insertletter(char[],char,int&); int main() { const int MAXCHARS = 30; const int STARTCHARS=6; char alpharray[MAXCHARS] = {‘B’, ‘J’, ‘K’, ‘M’,’S’,’Z’}; char newlet; int sizeofarray=STARTCHARS; while (5) { //loop forever cout << “ Enter a letter to add:”; cin >> newlet; insertletter(alpharray,newlet,sizeofarray); } CONTINUED…..

 2003 Prentice Hall, Inc. All rights reserved. Find position for new letter //find position for new letter while (alpharray[i] < addlet && i < sizeofarray) i++; newpos =i;

 2003 Prentice Hall, Inc. All rights reserved. Find position for new letter //move chars over --- should check for full array first if (sizeofarr == MAXCHARS) ….. for (i=sizeofarr; i>newpos; i--) alpharray[i] = alpharray[i-1];

 2003 Prentice Hall, Inc. All rights reserved. void insertletter(char alpharray[], char addlet, int& sizeofarr) { int i=0, endpos,newpos; //find position for new letter while (alpharray[i] < addlet && i < sizeofarr) i++; newpos =i; //move chars over --- should check for full array first for (i=sizeofarr; i>newpos; i--) alpharray[i] = alpharray[i-1]; alpharray[newpos] = addlet; //insert new letter sizeofarr++; //print out array for(i=0; i<sizeofarr; i++) cout <<alpharray[i]; }

 2003 Prentice Hall, Inc. All rights reserved. Analysis of the simple insertion algorithm In the worst case --- How many comparisons are needed to find the position of the letter to be inserted? In the worst case --- How many letters have to be shifted to make room for a new letter to be inserted? Are these the same cases?

 2003 Prentice Hall, Inc. All rights reserved. void insertletter(char alpharray[], char addlet, int& sizeofarr) { int i=0, endpos,newpos; //find position for new letter while (alpharray[i] < addlet && i < sizeofarr) i++; newpos =i; //move chars over --- should check for full array first for (i=sizeofarr; i>newpos; i--) alpharray[i] = alpharray[i-1]; alpharray[newpos] = addlet; //insert new letter sizeofarr++; //print out array for(i=0; i<sizeofarr; i++) cout <<alpharray[i]; What happens if the array is full? Can we use this code to insert elements into an empty list? If (sizeofarr == 0) { alpharray[0] = addlet; sizeofarr++; return 0; }

 2003 Prentice Hall, Inc. All rights reserved. Delete an element from a list Must find the element to delete: Then move everything over

 2003 Prentice Hall, Inc. All rights reserved. Delete Let’s assume we are given the position of the item to delete in delpos; DeleteElement(char alpharray[], int delpos, int& sizeofarr) { for (i=delpos+1; i<sizeofarr; i++) alpharray[i-1] = alpharray[i]; sizeofarr--; }

 2003 Prentice Hall, Inc. All rights reserved. ADT LIST: DONE: Insert element at end of a list; Insert element into previously sorted list TO DO: Sort List, Delete element, Create list, Find Element…..

 2003 Prentice Hall, Inc. All rights reserved. ADT: List Operation: sort. Given a list of unordered values in an array, sort the values so that they can be printed in sorted order.

 2003 Prentice Hall, Inc. All rights reserved. SIMPLE Sorting Sorting is a typical operation to put the elements in an array in order. Internal Sorts [for small data sets] selection bubble (exchange) External Sorts [for large data sets]

 2003 Prentice Hall, Inc. All rights reserved. Simple Sorting Selection sort Find smallest element, and put at the head of the list, repeat with remainder of list. The algorithm can also be formulated by finding the largest element and putting that at the head of the list

 2003 Prentice Hall, Inc. All rights reserved. Selection Sort index (k)sm_index 02 swap 21, 9 11 swap 13, swap 21, swap 21, Find smallest element, and put at the head of the list,repeat with remainder of list Scan 1 Scan 2 Scan 3 Scan 4

 2003 Prentice Hall, Inc. All rights reserved. Selection Sort const int size = 5; void sort(double [size]); void swap(double [size], int, int) // prototypes int main(void) {int index; double my_list[ ] = {21, 13, 9, 15, 17}; sort(my_list); // function call cout<<"\nThe sorted array is: \n"; for(index=0; index<size; index++) cout<<'\t'<<my_list[index]<<endl; … }

 2003 Prentice Hall, Inc. All rights reserved. Let’s build up the algorithm outer loop – array scans, each scan starts from the element after the previous scan inner loop – find smallest element swap smallest element with start of scan next outer loop

 2003 Prentice Hall, Inc. All rights reserved. Selection Sort void sort(double testArray[]) { int n, k, sm_index, moves=0;double smallest; for(k=0; k<size; k++) // size-1 = number of passes { } } smallest=testArray[k]; sm_index=k; swap(testArray, sm_index, k);// call to swap() for(n=k+1; n<size; n++) if(testArray[n]<smallest) {smallest=testArray[n]; sm_index=n; }

 2003 Prentice Hall, Inc. All rights reserved. Selection Sort void swap(double testArray[], int smaller, int pass) {// pass = current position: k double temp; temp=testArray[pass]; testArray[pass]=testArray[smaller]; testArray[smaller]=temp; }

 2003 Prentice Hall, Inc. All rights reserved. for(k=0; k<size; k++) // size-1 = number of passes { } } smallest=testArray[k]; sm_index=k; swap(testArray, sm_index, k);// call to swap() for(n=k+1; n<size; n++) if(testArray[n]<smallest) {smallest=testArray[n]; sm_index=n; } How many times is the inner if statement called? How many times is the “sm_index” being reset? How many times is the swap() function called?

 2003 Prentice Hall, Inc. All rights reserved Sorting Arrays Sorting data –Important computing application –Virtually every organization must sort some data Massive amounts must be sorted Bubble sort (sinking sort) –Several passes through the array –Successive pairs of elements are compared If increasing order (or identical), no change If decreasing order, elements exchanged –Repeat these steps for every element

 2003 Prentice Hall, Inc. All rights reserved. 31 Simple Sorting Bubble sort As we scan the list swap elements out of order. After the first scan, the largest element will be at the end of the list. Keep scanning the list until all of the elements are in the correct place. Bubble sort – because the small elements bubble up to the top…..

 2003 Prentice Hall, Inc. All rights reserved Sorting Arrays Example: –Go left to right, and exchange elements as necessary One pass for each element –Original: –Pass 1: (elements exchanged) –Pass 2: –Pass 3: (no changes needed) –Pass 4: –Pass 5: –Small elements "bubble" to the top (like 2 in this example)

 2003 Prentice Hall, Inc. All rights reserved. Bubble Sort Put smaller first No change Put smaller first

 2003 Prentice Hall, Inc. All rights reserved. Bubble Sort Begin again and put smaller first No change Put smaller first

 2003 Prentice Hall, Inc. All rights reserved. Bubble Sort Example 2 Begin --Put smaller first Put smaller first No change Put smaller first

 2003 Prentice Hall, Inc. All rights reserved. Bubble Sort – Example 2 Begin again and put smaller first No change Put smaller first

 2003 Prentice Hall, Inc. All rights reserved. Bubble Sort – Example 2 Begin again -- no change Swap – put smaller first Begin Again -- swap Sorted list

 2003 Prentice Hall, Inc. All rights reserved. 38 Let’s build up the algorithm – bubble sort outer loop – array scans, each scan starts from the first element of the list until _________ inner loop compare adjacent elements and swap next outer loop

 2003 Prentice Hall, Inc. All rights reserved Sorting Arrays Swapping variables int x = 3, y = 4; y = x; x = y; What happened? –Both x and y are 3! –Need a temporary variable Solution int x = 3, y = 4, temp = 0; temp = x; // temp gets 3 x = y; // x gets 4 y = temp; // y gets 3

 2003 Prentice Hall, Inc. All rights reserved. Outline 40 fig04_16.cpp (1 of 3) 1 // Fig. 4.16: fig04_16.cpp 2 // This program sorts an array's values into ascending order. 3 #include 4 5 using std::cout; 6 using std::endl; 7 8 #include 9 10 using std::setw; int main() 13 { 14 const int arraySize = 10; // size of array a 15 int a[ arraySize ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 }; 16 int hold; // temporary location used to swap array elements cout << "Data items in original order\n"; // output original array 21 for ( int i = 0; i < arraySize; i++ ) 22 cout << setw( 4 ) << a[ i ]; 23

 2003 Prentice Hall, Inc. All rights reserved. Outline 41 fig04_16.cpp (2 of 3) 24 // bubble sort 25 // loop to control number of passes 26 for ( int pass = 0; pass < arraySize - 1; pass++ ) // loop to control number of comparisons per pass 29 for ( int j = 0; j < arraySize - 1; j++ ) // compare side-by-side elements and swap them if 32 // first element is greater than second element 33 if ( a[ j ] > a[ j + 1 ] ) { 34 hold = a[ j ]; 35 a[ j ] = a[ j + 1 ]; 36 a[ j + 1 ] = hold; } // end if 39 Do a pass for each element in the array. If the element on the left (index j ) is larger than the element on the right (index j + 1 ), then we swap them. Remember the need of a temp variable.

 2003 Prentice Hall, Inc. All rights reserved. Outline 42 fig04_16.cpp (3 of 3) fig04_16.cpp output (1 of 1) 40 cout << "\nData items in ascending order\n"; // output sorted array 43 for ( int k = 0; k < arraySize; k++ ) 44 cout << setw( 4 ) << a[ k ]; cout << endl; return 0; // indicates successful termination } // end main Data items in original order Data items in ascending order

 2003 Prentice Hall, Inc. All rights reserved. 43 Can we improve the algorithm? In the first example, we did not have to keep scanning the list since the list was sorted after the “2 nd ” scan…… Check to see if any swaps were performed on the previous inner loop. If none were performed do not scan the list anymore since it is sorted WE CAN END THE ALGORITHM EARLY: EARLY TERMINATION how can we accomplish this?

 2003 Prentice Hall, Inc. All rights reserved. Outline // bubble sort 25 int flag = 1; 26 for ( int pass = 0; (pass < arraySize – 1) && flag; pass++ ) 27 flag = 0; 28 // loop to control number of comparisons per pass 29 for ( int j = 0; j < arraySize - 1; j++ ) // compare side-by-side elements and swap them if 32 // first element is greater than second element 33 if ( a[ j ] > a[ j + 1 ] ) { 34 hold = a[ j ]; 35 a[ j ] = a[ j + 1 ]; 36 a[ j + 1 ] = hold; 37 flag = 1; //set flag since swap occurred } // end if 39 Bubble sort with early termination Possible early termination

 2003 Prentice Hall, Inc. All rights reserved. Outline // bubble sort 25 // loop to control number of passes 26 for ( int pass = 0; pass < arraySize - 1; pass++ ) // loop to control number of comparisons per pass 29 for ( int j = 0; j < arraySize - 1; j++ ) // compare side-by-side elements and swap them if 32 // first element is greater than second element 33 if ( a[ j ] > a[ j + 1 ] ) { 34 hold = a[ j ]; 35 a[ j ] = a[ j + 1 ]; 36 a[ j + 1 ] = hold; } // end if 39 How many times does the outer loop execute in the worst case? How many times is the swap performed (inner loop) in the worst case?

 2003 Prentice Hall, Inc. All rights reserved. 46 ADT LIST So far we have seen the following operations on a “list”: Adding an element Deleting an element Sorting the list for display Computing statistics on a list of numeric values Last operation  Finding an element in a list

 2003 Prentice Hall, Inc. All rights reserved. 47 Finding an element is important: FOR DELETION: usually you must “find” the element before deleting it…. FOR INSERTION: must find the place to insert an element (if not in alphabetic order)…. TO PRINT: i.e., find students name & print grade

 2003 Prentice Hall, Inc. All rights reserved Searching Arrays: Linear Search and Search array for a key value Linear search –Key value is the value to be searched for. It is usually inputted by the user. –Compare each element of array with key value Start at one end, go to other If the element is found, return the index number of the array. Remember --- we do not usually need to return the value, we know the value since it is what we were searching for. We need to know the POSITION of the value, i.e., its index.

 2003 Prentice Hall, Inc. All rights reserved. 49 SEARCHING Finding an element in an array Example: Given an array which contains a list of integers, find the index of a particular integer index of 24 is 1 index of 100 is 6 index of 35 is NOT FOUND

 2003 Prentice Hall, Inc. All rights reserved. Outline 50 fig04_19.cpp (1 of 2) 1 // Fig. 4.19: fig04_19.cpp 2 // Linear search of an array. 3 #include 4 5 using std::cout; 6 using std::cin; 7 using std::endl; 8 9 int linearSearch( const int [], int, int ); // prototype int main() 12 { 13 const int arraySize = 100; // size of array a 14 int a[ arraySize ]; // create array a 15 int searchKey; // value to locate in a for ( int i = 0; i < arraySize; i++ ) // create some data 18 a[ i ] = 2 * i; cout << "Enter integer search key: "; 21 cin >> searchKey; // attempt to locate searchKey in array a 24 int element = linearSearch( a, searchKey, arraySize ); 25 Takes array, search key, and array size.

 2003 Prentice Hall, Inc. All rights reserved. Outline 51 fig04_19.cpp (2 of 2) 26 // display results 27 if ( element != -1 ) 28 cout << "Found value in element " << element << endl; 29 else 30 cout << "Value not found" << endl; return 0; // indicates successful termination } // end main // compare key to every element of array until location is 37 // found or until end of array is reached; return subscript of 38 // element if key or -1 if key not found 39 int linearSearch( const int array[], int key, int sizeOfArray ) 40 { 41 for ( int j = 0; j < sizeOfArray; j++ ) if ( array[ j ] == key ) // if found, 44 return j; // return location of key return -1; // key not found } // end function linearSearch

 2003 Prentice Hall, Inc. All rights reserved. Outline 52 fig04_19.cpp output (1 of 1) Enter integer search key: 36 Found value in element 18 Enter integer search key: 37 Value not found

 2003 Prentice Hall, Inc. All rights reserved. 53 Linear Search Analysis In the worst case, how many elements have to be compared? int linearSearch( const int array[], int key, int sizeOfArray ) 40 { 41 for ( int j = 0; j < sizeOfArray; j++ ) if ( array[ j ] == key ) // if found, 44 return j; // return location of key return -1; // key not found } // end function linearSearch

 2003 Prentice Hall, Inc. All rights reserved. 54 Analysis IF an element is not in the array, all of the elements in the array have to be checked to determine that a particular element is not there. FOR EXAMPLE: if there are 10 elements in the array, 10 comparisons have to be made in the worst case. Therefore, if there are n elements in the array... n comparisons have to be made in the worst case

 2003 Prentice Hall, Inc. All rights reserved. 55 What if the array were already sorted? Search for an element in a sorted array Do we have to check all of the elements if we know something about the order of the array? No -- we can search until we know the element cannot appear anymore, i.e. array[j] > target. However in the worst case the # of comparisons is still the number of elements in the array, I.e. we have to check all of the elements in the array

 2003 Prentice Hall, Inc. All rights reserved. 56 Better Linear Search for Sorted Array “Early termination” --- int linearSearchSorted( const int array[], int key, int sizeOfArray ) 40 { 41 int j = 0; 42 while ( j < sizeOfArray-1 && key < array[j]) 43 j++ ; if ( array[ j ] == key ) // if found, 44 return j; // return location of key return -1; // key not found } // end function linearSearch

 2003 Prentice Hall, Inc. All rights reserved. 57 How to use a telephone book

 2003 Prentice Hall, Inc. All rights reserved. 58 To find the name “Randy Jackson” you would not start with Aardvark and continue until you hit the name...

 2003 Prentice Hall, Inc. All rights reserved. 59 start Input item; set lower index to zero set upper index to size-1 While lower index < upper indexReturn -1 Calculate midpoint Item == midpoint? Return index Item > midpoint Set upper index to midpoint-1 no yes Set lower index to midpoint + 1 no yes no Loop until found/not found

 2003 Prentice Hall, Inc. All rights reserved Midpoint low high Example 1: Looking for the number 140 Midpoint high low low Midpoint high highlow How many comparisons?3

 2003 Prentice Hall, Inc. All rights reserved Midpoint low high Example 1: Looking for the number 7 Midpoint high low low Midpoint high How many comparisons? 3

 2003 Prentice Hall, Inc. All rights reserved. Outline 62 fig04_20.cpp (1 of 6) 1 // Fig. 4.20: fig04_20.cpp 2 // Binary search of an array. 3 #include 4 5 using std::cout; 6 using std::cin; 7 using std::endl; 8 9 #include using std::setw; // function prototypes 14 int binarySearch( const int [], int, int, int, int ); 15 void printHeader( int ); 16 void printRow( const int [], int, int, int, int ); int main() 19 { 20 const int arraySize = 15; // size of array a 21 int a[ arraySize ]; // create array a 22 int key; // value to locate in a for ( int i = 0; i < arraySize; i++ ) // create some data 25 a[ i ] = 2 * i; 26

 2003 Prentice Hall, Inc. All rights reserved. Outline 63 fig04_20.cpp (2 of 6) 27 cout << "Enter a number between 0 and 28: "; 28 cin >> key; printHeader( arraySize ); // search for key in array a 33 int result = 34 binarySearch( a, key, 0, arraySize - 1, arraySize ); // display results 37 if ( result != -1 ) 38 cout << '\n' << key << " found in array element " 39 << result << endl; 40 else 41 cout << '\n' << key << " not found" << endl; return 0; // indicates successful termination } // end main 46

 2003 Prentice Hall, Inc. All rights reserved. Outline 64 fig04_20.cpp (3 of 6) 47 // function to perform binary search of an array 48 int binarySearch( const int b[], int searchKey, int low, 49 int high, int size ) 50 { 51 int middle; // loop until low subscript is greater than high subscript 54 while ( low <= high ) { // determine middle element of subarray being searched 57 middle = ( low + high ) / 2; // display subarray used in this loop iteration 60 printRow( b, low, middle, high, size ); 61 Determine middle element

 2003 Prentice Hall, Inc. All rights reserved. Outline // if searchKey matches middle element, return middle 63 if ( searchKey == b[ middle ] ) // match 64 return middle; else // if searchKey less than middle element, 69 // set new high element 70 if ( searchKey < b[ middle ] ) 71 high = middle - 1; // search low end of array // if searchKey greater than middle element, 74 // set new low element 75 else 76 low = middle + 1; // search high end of array 77 } return -1; // searchKey not found } // end function binarySearch Use the rule of binary search: If key equals middle, match If less, search low end If greater, search high end Loop sets low, middle and high dynamically. If searching the high end, the new low is the element above the middle. while ( low <= high ) { // determine middle element of subarray being searched 57 middle = ( low + high ) / 2; // display subarray used in this loop iteration 60 printRow( b, low, middle, high, size );

 2003 Prentice Hall, Inc. All rights reserved. Outline 66 fig04_20.cpp (5 of 6) // print header for output 84 void printHeader( int size ) 85 { 86 cout << "\nSubscripts:\n"; // output column heads 89 for ( int j = 0; j < size; j++ ) 90 cout << setw( 3 ) << j << ' '; cout << '\n'; // start new line of output // output line of - characters 95 for ( int k = 1; k <= 4 * size; k++ ) 96 cout << '-'; cout << endl; // start new line of output } // end function printHeader 101

 2003 Prentice Hall, Inc. All rights reserved. Outline 67 fig04_20.cpp (6 of 6) 102 // print one row of output showing the current 103 // part of the array being processed 104 void printRow( const int b[], int low, int mid, 105 int high, int size ) 106 { 107 // loop through entire array 108 for ( int m = 0; m < size; m++ ) // display spaces if outside current subarray range 111 if ( m high ) 112 cout << " "; // display middle element marked with a * 115 else if ( m == mid ) // mark middle value 118 cout << setw( 3 ) << b[ m ] << '*'; // display other elements in subarray 121 else 122 cout << setw( 3 ) << b[ m ] << ' '; cout << endl; // start new line of output } // end function printRow

 2003 Prentice Hall, Inc. All rights reserved. Outline 68 fig04_20.cpp output (1 of 2) Enter a number between 0 and 28: 6 Subscripts: * * found in array element 3 Enter a number between 0 and 28: 25 Subscripts: * * * 28 24* 25 not found

 2003 Prentice Hall, Inc. All rights reserved. Outline 69 fig04_20.cpp output (2 of 2) Enter a number between 0 and 28: 8 Subscripts: * * * 12 8* 8 found in array element 4

 2003 Prentice Hall, Inc. All rights reserved. 70 SEARCH ALGORITHM BEST CASE WORST CASE Linear Search Entire array 1 Binary Search 1 The number of times you can divide the array by 2 = log 2 (#elems_in_array) ******* Sorted array:

 2003 Prentice Hall, Inc. All rights reserved. 71 What does log 2 mean? xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Z elements xxxxxxxxxxxxxxxxxxxxxxxx Z/2 elements xxxxxxxxxxx Z/2/2 elements xxxxxx Z/2/2/2 elements Z 2 Z 2323 Z 2x2x =1? Log 2 z = x x is the number of times I can keep splitting the list until there is only 1 element left

 2003 Prentice Hall, Inc. All rights reserved. 72 Powers of 2 Below are tables for the power 2 x x2xx2x

 2003 Prentice Hall, Inc. All rights reserved. 73 SEARCH ALGORITHM BEST CASE WORST CASE Linear Search n 1 Binary Search 1 Log 2 (n) For an ORDERED array of n elements

 2003 Prentice Hall, Inc. All rights reserved. 74 SEARCH ALGORITHM BEST CASE WORST CASE Linear Searchn 1 Binary Search What about an unsorted array? NOT APPLICABLE

 2003 Prentice Hall, Inc. All rights reserved Case Study: Computing Mean, Median and Mode Using Arrays Mean –Average (sum/number of elements) Median –Number in middle of sorted list –1, 2, 3, 4, 5 (3 is median) –If even number of elements, take average of middle two Mode –Number that occurs most often –1, 1, 1, 2, 3, 3, 4, 5 (1 is mode)

 2003 Prentice Hall, Inc. All rights reserved. Outline 76 fig04_17.cpp (1 of 8) 1 // Fig. 4.17: fig04_17.cpp 2 // This program introduces the topic of survey data analysis. 3 // It computes the mean, median, and mode of the data. 4 #include 5 6 using std::cout; 7 using std::endl; 8 using std::fixed; 9 using std::showpoint; #include using std::setw; 14 using std::setprecision; void mean( const int [], int ); 17 void median( int [], int ); 18 void mode( int [], int [], int ); 19 void bubbleSort( int[], int ); 20 void printArray( const int[], int ); int main() 23 { 24 const int responseSize = 99; // size of array responses 25

 2003 Prentice Hall, Inc. All rights reserved. Outline 77 fig04_17.cpp (2 of 8) 26 int frequency[ 10 ] = { 0 }; // initialize array frequency // initialize array responses 29 int response[ responseSize ] = 30 { 6, 7, 8, 9, 8, 7, 8, 9, 8, 9, 31 7, 8, 9, 5, 9, 8, 7, 8, 7, 8, 32 6, 7, 8, 9, 3, 9, 8, 7, 8, 7, 33 7, 8, 9, 8, 9, 8, 9, 7, 8, 9, 34 6, 7, 8, 7, 8, 7, 9, 8, 9, 2, 35 7, 8, 9, 8, 9, 8, 9, 7, 5, 3, 36 5, 6, 7, 2, 5, 3, 9, 4, 6, 4, 37 7, 8, 9, 6, 8, 7, 8, 9, 7, 8, 38 7, 4, 4, 2, 5, 3, 8, 7, 5, 6, 39 4, 5, 6, 1, 6, 5, 7, 8, 7 }; // process responses 42 mean( response, responseSize ); 43 median( response, responseSize ); 44 mode( frequency, response, responseSize ); return 0; // indicates successful termination } // end main 49

 2003 Prentice Hall, Inc. All rights reserved. Outline 78 fig04_17.cpp (3 of 8) 50 // calculate average of all response values 51 void mean( const int answer[], int arraySize ) 52 { 53 int total = 0; cout << "********\n Mean\n********\n"; // total response values 58 for ( int i = 0; i < arraySize; i++ ) 59 total += answer[ i ]; // format and output results 62 cout << fixed << setprecision( 4 ); cout << "The mean is the average value of the data\n" 65 << "items. The mean is equal to the total of\n" 66 << "all the data items divided by the number\n" 67 << "of data items (" << arraySize 68 << "). The mean value for\nthis run is: " 69 << total << " / " << arraySize << " = " 70 ( total ) / arraySize 71 << "\n\n"; } // end function mean 74 We cast to a double to get decimal points for the average (instead of an integer).

 2003 Prentice Hall, Inc. All rights reserved. Outline 79 fig04_17.cpp (4 of 8) 75 // sort array and determine median element's value 76 void median( int answer[], int size ) 77 { 78 cout << "\n********\n Median\n********\n" 79 << "The unsorted array of responses is"; printArray( answer, size ); // output unsorted array bubbleSort( answer, size ); // sort array cout << "\n\nThe sorted array is"; 86 printArray( answer, size ); // output sorted array // display median element 89 cout << "\n\nThe median is element " << size / 2 90 << " of\nthe sorted " << size 91 << " element array.\nFor this run the median is " 92 << answer[ size / 2 ] << "\n\n"; } // end function median 95 Sort array by passing it to a function. This keeps the program modular.

 2003 Prentice Hall, Inc. All rights reserved. Outline 80 fig04_17.cpp (5 of 8) 96 // determine most frequent response 97 void mode( int freq[], int answer[], int size ) 98 { 99 int largest = 0; // represents largest frequency 100 int modeValue = 0; // represents most frequent response cout << "\n********\n Mode\n********\n"; // initialize frequencies to for ( int i = 1; i <= 9; i++ ) 106 freq[ i ] = 0; // summarize frequencies 109 for ( int j = 0; j < size; j++ ) freq[ answer[ j ] ]; // output headers for result columns 113 cout << "Response" << setw( 11 ) << "Frequency" 114 << setw( 19 ) << "Histogram\n\n" << setw( 55 ) 115 << " \n" << setw( 56 ) 116 << " \n\n"; 117

 2003 Prentice Hall, Inc. All rights reserved. Outline 81 fig04_17.cpp (6 of 8) 118 // output results 119 for ( int rating = 1; rating <= 9; rating++ ) { 120 cout << setw( 8 ) << rating << setw( 11 ) 121 << freq[ rating ] << " "; // keep track of mode value and largest fequency value 124 if ( freq[ rating ] > largest ) { 125 largest = freq[ rating ]; 126 modeValue = rating; } // end if // output histogram bar representing frequency value 131 for ( int k = 1; k <= freq[ rating ]; k++ ) 132 cout << '*'; cout << '\n'; // begin new line of output } // end outer for // display the mode value 139 cout << "The mode is the most frequent value.\n" 140 << "For this run the mode is " << modeValue 141 << " which occurred " << largest << " times." << endl; } // end function mode The mode is the value that occurs most often (has the highest value in freq ).

 2003 Prentice Hall, Inc. All rights reserved. Outline 82 fig04_17.cpp (7 of 8) // function that sorts an array with bubble sort algorithm 146 void bubbleSort( int a[], int size ) 147 { 148 int hold; // temporary location used to swap elements // loop to control number of passes 151 for ( int pass = 1; pass < size; pass++ ) // loop to control number of comparisons per pass 154 for ( int j = 0; j < size - 1; j++ ) // swap elements if out of order 157 if ( a[ j ] > a[ j + 1 ] ) { 158 hold = a[ j ]; 159 a[ j ] = a[ j + 1 ]; 160 a[ j + 1 ] = hold; } // end if } // end function bubbleSort 165

 2003 Prentice Hall, Inc. All rights reserved. Outline 83 fig04_17.cpp (8 of 8) 166 // output array contents (20 values per row) 167 void printArray( const int a[], int size ) 168 { 169 for ( int i = 0; i < size; i++ ) { if ( i % 20 == 0 ) // begin new line every 20 values 172 cout << endl; cout << setw( 2 ) << a[ i ]; } // end for } // end function printArray

 2003 Prentice Hall, Inc. All rights reserved. Outline 84 fig04_17.cpp output (1 of 2) ******** Mean ******** The mean is the average value of the data items. The mean is equal to the total of all the data items divided by the number of data items (99). The mean value for this run is: 681 / 99 = ******** Median ******** The unsorted array of responses is The sorted array is The median is element 49 of the sorted 99 element array. For this run the median is 7

 2003 Prentice Hall, Inc. All rights reserved. Outline 85 fig04_17.cpp output (2 of 2) ******** Mode ******** Response Frequency Histogram * 2 3 *** 3 4 **** 4 5 ***** 5 8 ******** 6 9 ********* 7 23 *********************** 8 27 *************************** 9 19 ******************* The mode is the most frequent value. For this run the mode is 8 which occurred 27 times.