1 principles of computer science i honors section note set 5 cse 1341
TRANSCRIPT
1
Principles of Computer Science I
Honors Section
Note Set 5CSE 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 foundint 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 valsearchArray(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
Binary Search• 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
6657443522161411108751
[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
6657443522161411108751
[0] [12][6]
16 val
middle = first+(last-first)/2 = 6arr[middle] = 14
Is val >, < or == 14
>
first last
so: first = middle + 1first = 7
Iter 1
11
Binary Search - Intuition
6657443522161411108751
[0] [12][6]
16 val
middle = first+(last-first)/2 = 9arr[middle] = 35
Is val >, < or == 35
firstlast
Iter 2
first = 7last = 12
[9][7]
< so: last = middle - 1last = 8
12
Binary Search - Intuition
6657443522161411108751
[0] [12][6]
16 val
middle = first+(last-first)/2 = 7arr[middle] = 16
Is val >, < or == 16
first last
Iter 3
first = 7last = 8
[9][7]
= so: return middlereturn 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
213 5
swap if out of order
213 5
213 5
21 3 5
21 3 5
…and so on untilyou make one passwithout swapping
16
Bubble Sort – Swap Function
void swap(int& x, int& y)
{
int temp = x;
x = y;
y = temp;
}
17
Bubble Sortvoid 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
198327
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
19832 7
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
19832 7
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
19832 7
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
19832 7
swapped = true
arr
[4] [5]
if(arr[x]>arr[x+1]){ swap(arr[x], arr[x+1]); swapped = true;}
x=4
1 9
Finished w/ 1st Iteration of do-while loop. . .
23
Bubble Sort - Example
1 9832 7
swapped = false
arr
[1] [5][0] [2] [3] [4]
1 8
true
Finished w/ 2nd Iteration of do-while loop. . .
24
Bubble Sort - Example
1 9832 7
swapped = false
arr
[1] [5][0] [2] [3] [4]
true
Finished w/ 3rd Iteration of do-while loop. . .
1 7
25
Bubble Sort - Example
7 9832 1
swapped = false
arr
[1] [5][0] [2] [3] [4]
true
Finished w/ 4th Iteration of do-while loop. . .
31
26
Bubble Sort - Example
7 9812 3
swapped = false
arr
[1] [5][0] [2] [3] [4]
true
Finished w/ 5th Iteration of do-while loop. . .but still must go through one more time!
1 2
27
Bubble Sort - Example
7 9821 3
swapped = false
arr
[1] [5][0] [2] [3] [4]
DONE!
28
Questions???
?