instructor: alexander stoytchev cpre 185: intro to problem solving (using c)
DESCRIPTION
Administrative Stuff Midterm 2 is next week Same format as before: Lab exam during your regular lab time (Oct 27 or Oct 28) Lecture exam on Oct 28 The exam will be cumulative with emphasis on conditional statements (if, if-else, switch), loops (do, while, for), arrays (to be covered), and searching and sorting algorithms (to be covered).TRANSCRIPT
Instructor: Alexander Stoytchev
http://www.ece.iastate.edu/~alexs/classes/2009_Fall_185/
CprE 185: Intro to Problem Solving
(using C)
Administrative Stuff
• HW6 is today (Oct 21) @ 8pm.
• HW7 is due this Friday (Oct 23) @ 8pm.
Administrative Stuff
• Midterm 2 is next week
• Same format as before: Lab exam during your regular lab time (Oct 27 or Oct 28) Lecture exam on Oct 28
• The exam will be cumulative with emphasis on conditional statements (if, if-else, switch), loops (do, while, for), arrays (to be covered), and searching and sorting algorithms (to be covered).
Linear Search in a Sorted Array
Problem: Find the index of a number in a
sorted array of integers
LinearSearch_InSortedArray.c
LinearSearch_InSortedArray.c#include <stdio.h>#include <stdlib.h>#define N 12int main(){
int a[N]= { 4, 7, 8, 10, 14, 21, 22, 36, 62, 77, 81, 91};
int target = 62; //int target = 72;// Try this target next int i, idx=-1;for(i=0; i< N; i++){
if(a[i] == target){
idx=i;break;
}else if(a[i]>target)
break; // we can stop here}if(idx == -1)
printf("Target not found.\n\n");else
printf("Target found at index: %d. \n\n", idx);}
Analysis
• If the list is unsorted we have to search all numbers before we declare that the target is not present in the array.
• Because the list is sorted we can stop as soon as we reach a number that is greater than our target
• Can we do even better?
Binary Search
• At each step it splits the remaining array elements into two groups
• Therefore, it is faster than the linear search
• Works only on an already SORTED array
• Thus, there is a performance penalty for sorting the array
[http://web.ics.purdue.edu/~cs154/lectures/lecture011.htm]
[http://web.ics.purdue.edu/~cs154/lectures/lecture011.htm]
Example:SuccessfulBinarySearch
Example: BinarySearch.c
Binary_Search.c#include <stdio.h>#include <stdlib.h>#define N 12
int main(){
int a[N]= { 4, 7, 8, 10, 14, 21, 22, 36, 62, 77, 81, 91}; //sorted in increasing orderint i;int target = 22; //int target = 72; // Try this target nextint idx=-1; // if the target is found its index is stored here
int first=0; // initial values for the three search varaiblesint last= N-1; int mid= (first + last)/2;
while(last >= first) {
if( a[mid] == target){
idx=mid; // Found it!break; // exit the while loop
} else if(a[mid] > target){
// don't search in a[mid] ... a[last]last = mid-1;
}else{
// don't search in a[first] ... a[mid]first = mid +1;
}
// recalculate mid for the next iterationmid = (first + last)/2; // integer division!
} // end of while loop
if(idx == -1)printf("Target not found.\n\n");
elseprintf("Target found at index: %d \n\n", idx);
}
Analysis of Searching Methods• For an array of size n
• Sequential Search (Average-Case) n/2• Sequential Search (Worst-Case) n
• Binary Search (Average-Case) log(n)/2• Binary Search (Worst-Case) log(n)
Other Stuff in Chapter 8
Two-Dimensional Arrays
• int Matrix[2][3];
• Defines the following elements: Row1: Matrix[0][0], Matrix[0][1], Matrix[0][2] Row2: Matrix[1][0], Matrix[1][1], Matrix[1][2]
Two-Dimensional Arrays
int Matrix[2][3];
• Initialization: Matrix[0][0]=3; Matrix[0][1]=4; Matrix[0][2]=5;
Matrix[1][0]=1; Matrix[1][1]= -20; Matrix[1][2]=7;
Two-Dimensional Arrays
• Initialization when defined:
int Matrix[2][3] = { {3, 4, 5}, {1, -20, 7}};
Two-Dimensional Arrays
• 2D arrays and nested for loop
int Matrix[2][3] = { {3, 4, 5}, {1, -20, 7}};int i,j;for(i=0; i< 2; i++){ for(j=0; j<3; j++) printf(“%3d ”, Matrix[i][j]); printf(“\n”);
}
Sorting Algorithms
CprE 185: Intro to Problem SolvingIowa State University, Ames, IACopyright © Alexander Stoytchev
Chapter 8 (Sorting)
Insertion Sort
[http://web.ics.purdue.edu/~cs154/lectures/lecture010.htm]
0
Analogy: Sorting Cards
Analogy: Sorting Cards
First Iteration
First Iteration(All face up cards are sorted.
End of the first iteration.)
Second Iteration
Second Iteration(All face up cards are sorted. End of the second iteration.)
Third Iteration
Third Iteration(All face up cards are sorted.
End of the third iteration.)
Fourth Iteration
Fourth Iteration(All face up cards are sorted.
End of the fourth iteration.)
Fifth Iteration
Fifth Iteration(All face up cards are sorted.
End of the fifth iteration.)
Swapping Array Elements
[http://www.scs.ryerson.ca/jpanar/w2006/cps125/example.gifs/ch7/Arr.Swap.gif]
First Iteration (array-like swapping)
First Iteration(All face up cards are sorted.
End of the first iteration.)
Second Iteration (array-like swapping)
Second Iteration(All face up cards are sorted. End of the second iteration.)
[http://web.ics.purdue.edu/~cs154/lectures/lecture010.htm]
Example:InsertionSort
Animations for Insertion Sort
[http://maven.smith.edu/~thiebaut/java/sort/demo.html]
Animations of Sorting Algoritms
• http://maven.smith.edu/~thiebaut/java/sort/demo.html
• http://www.cs.ubc.ca/spider/harrison/Java/sorting-demo.html
C code
// Swap a[i] with the smallest element
int temp = a[i];a[i] = a[minIndex];a[minIndex] = temp;
Example: InsertionSort.c
// Insertion Sort#include <stdlib.h>#define N 6int main() {
int a[N]= { 23, 78, 45, 8, 32, 56}; int i; for(i = 1; i < N; i++) { int j = i; int INS = a[i]; while ((j > 0) && (a[j-1] > INS)) { a[j] = a[j-1]; // shift elements to the right j--; } a[j] = INS; // insert the element } system("pause");
}
Selection Sort(Cards Example)
Initial Configuration
(search all cards and find the largest)
Swap the two cards
As before, the swap is performed in three steps.
Sorted Unsorted
Among the remaining cardsthe king is the largest.
It will remain in place.
But the algorithm may performSome empty operations(ie., swap it with itself in place)
Sorted Unsorted
Among the remaining cardsthe queen is the largest.
It will remain in place.
But the algorithm may performSome empty operations(i.e., swap it with itself in place)
Sorted Unsorted
Among the remaining cardsthe Jack is the largest.
It will remain in place.
But the algorithm may performSome empty operations(i.e., swap it with itself in place)
As before, the swap is performed in three steps.
Sorted Unsorted
We are down to the last card.Because there is only one and Because we know that it is Smaller than all the restWe don’t need to do anything Else with it. This is why the Algorithm goes up to < N-1
Sorted
All cards are now sorted.
Selection Sort
[http://web.ics.purdue.edu/~cs154/lectures/lecture010.htm]
Example:SelectionSort
[http://web.ics.purdue.edu/~cs154/lectures/lecture010.htm]
Example: SelectionSort.c
// Selection Sort#include <stdlib.h>#define N 6int main() {
int a[N]= { 23, 78, 45, 8, 32, 56}; int i,j; // Sort the array using Selection Sort int minIndex; for(i=0; i < N-1; i++) { // find the minimum element in the unsorted part of the array minIndex=i; for(j=i+1; j < N; j++) if(a[j] < a[minIndex]) minIndex = j;
// Swap a[i] with the smallest element int temp = a[i]; a[i] = a[minIndex]; a[minIndex] = temp; } system("pause");
}
Bubble Sort(Cards Example)
Initial Configuration
Unsorted
First iteration of the outer loop
End of the first iteration
(the smallest card is placed last)
SortedUnsorted SortedUnsorted
End of the 2nd iteration
(the smallest two cards are placed last)
2nd Iteration
SortedUnsorted
End of the 3rd iteration
(the smallest three cards are placed last)
3rd Iteration
SortedUnsorted
End of the 4-th iteration
all cards are sorted
4-th Iteration
SortedUnsorted
Sorted
The last card (the Ace)Is automatically sorted.We don’t need to do anything extra.
Bubble Sort
[http://web.ics.purdue.edu/~cs154/lectures/lecture010.htm]
0
[http://web.ics.purdue.edu/~cs154/lectures/lecture010.htm]
Example:BubbleSort
Example: BubbleSort.c
// Bubble Sort#include <stdlib.h>#define N 6 int main() {
int a[N]= { 23, 78, 45, 8, 32, 56}; int i, j; // Sort the array using Bubble Sort // Last elements in the array are sorted first (in decreasing order)for(i=0; i < N; i++) { for(j=0; j< N-1-i; j++) if (a[j+1] > a[j]) /* compare the two neighbors */ { int tmp = a[j]; /* swap a[j] and a[j+1] */ a[j] = a[j+1]; a[j+1] = tmp; } }
}
Analysis: all three run in O(n2) time
[http://linux.wku.edu/~lamonml/algor/sort/sort.html]
Analysis• There are faster sorting algorithms
Heap sort Quick sort Merge Sort
• We will not cover those but feel free to study them on your own.
• They run in O(n log n) time.
O(n log n) sorting algorithms
[http://linux.wku.edu/~lamonml/algor/sort/sort.html]
Questions?
THE END