1 Principles of Computer Science I Honors Section Note Set 5 CSE 1341
2 Today: Searching and Sorting Arrays
3 Searching Looking for a particular value in an array Linear Search –Start at the beginning (or end) and iteratively check every element Until you find it OR until you reach the end Binary Search –Start in the middle of a sorted array Eliminates ½ of the remaining search space on each iteration
4 Linear Search int test[5]={10, 42, 8, 100, -3}; int result; result = searchArray(test, 5, 100); if (result == -1) cout << “100 Not Found” << endl; else cout << “100 Found” << endl; //Returns Subscript of element or -1 if not found int searchArray(int arr[], int numElem, int target) { for(int x = 0; x < numElem; x++) { if (arr[x] == target) return x; } return (-1); }
5 Searching Also Searching –Finding the largest or smallest element in an array //Returns Subscript of largest element int //Largest value placed in val searchArray(int arr[], int numElem, int& val) { val = arr[0]; int subs = 0; for(int x = 1; x < numElem; x++) { if (arr[x] > val) { val = arr[x]; subs = x; } return subs; }
6 Binary Search
7 Array must be sorted Only searching ½ of the array in each iteration of the search int main() { int test[13]={1,5,7,8,10,11,14,16,22, 35,44,57,66}; int result = binarySearch(test,13,16); if(result == -1) cout<<“Number not found”<<endl; else cout<<“Number found”<<endl; return 0; }
8 Binary Search - Intuition [0][12][6] 16 value We ask: Is Value in the top half of the array, or the bottom half? Determine this based on comparing value to middle element
9 Binary Search - Implementation int binarySearch(int arr[], int numElem, int val) { int first = 0, last = numElem – 1, middle; while(first <= last) { middle=first+(last-first)/2; if (arr[middle]==val) return middle; else if(arr[middle]>val) last = middle – 1; else first = middle + 1; } return -1; } find the middle index If val is in bottom half If val is in top half
10 Binary Search - Intuition [0][12][6] 16 val middle = first+(last-first)/2 = 6 arr[middle] = 14 Is val >, < or == 14 > first last so : first = middle + 1 first = 7 Iter 1
11 Binary Search - Intuition [0][12][6] 16 val middle = first+(last-first)/2 = 9 arr[middle] = 35 Is val >, < or == 35 first last Iter 2 first = 7 last = 12 [9][7] < so : last = middle - 1 last = 8
12 Binary Search - Intuition [0][12][6] 16 val middle = first+(last-first)/2 = 7 arr[middle] = 16 Is val >, < or == 16 first last Iter 3 first = 7 last = 8 [9][7] = so : return middle return 7 [8]
13 Sorting
14 Motivation Searching sorted data is faster than searching unsorted data –What if the phonebook wasn’t in alphabetical order? Sorted data is usually easier to deal with Can sort ascending or descending
15 Bubble Sort Intuition 2135 swap if out of order …and so on until you make one pass without swapping
16 Bubble Sort – Swap Function void swap(int& x, int& y) { int temp = x; x = y; y = temp; }
17 Bubble Sort void bubbleSort(int arr[], int numElem) { bool swapped; do { swapped = false; for (int x = 0; x < (numElem-1); x++) { if (arr[x] > arr[x+1]) { swap(arr[x], arr[x+1]); swapped = true; } } while (swapped); }
18 Bubble Sort - Example swapped = false arr [0][1] [5] if(arr[x]>arr[x+1]){ swap(arr[x], arr[x+1]); swapped = true; } true 72 x=0 72
19 Bubble Sort - Example swapped = true arr [2][1] [5] if(arr[x]>arr[x+1]){ swap(arr[x], arr[x+1]); swapped = true; } 73 x=1
20 false – do nothing Bubble Sort - Example swapped = true arr [2][3] [5] if(arr[x]>arr[x+1]){ swap(arr[x], arr[x+1]); swapped = true; } x=2
21 false – do nothing Bubble Sort - Example swapped = true arr [4][3][5] if(arr[x]>arr[x+1]){ swap(arr[x], arr[x+1]); swapped = true; } x=3
22 Bubble Sort - Example swapped = true arr [4][5] if(arr[x]>arr[x+1]){ swap(arr[x], arr[x+1]); swapped = true; } x=4 19 Finished w/ 1 st Iteration of do-while loop...
23 Bubble Sort - Example swapped = false arr [1][5][0][2][3][4] 18 true Finished w/ 2nd Iteration of do-while loop...
24 Bubble Sort - Example swapped = false arr [1][5][0][2][3][4] true Finished w/ 3 rd Iteration of do-while loop... 17
25 Bubble Sort - Example swapped = false arr [1][5][0][2][3][4] true Finished w/ 4 th Iteration of do-while loop... 31
26 Bubble Sort - Example swapped = false arr [1][5][0][2][3][4] true Finished w/ 5 th Iteration of do-while loop... but still must go through one more time! 12
27 Bubble Sort - Example swapped = false arr [1][5][0][2][3][4] DONE!
28 Questions??? ?