CIS 22
Data Structures
Algorithmic Analysis


Overview

Some Examples

Linear Search of an Array
bool linearSearch(int *arr, int n, int val) {
   for (int i = 0; i < n; i++)
      if (arr[i] == val) return true;
   return false;	
}
  
Selection Sort of an Array
bool selectionSort(int *arr, int n) {
   for (int last = n-1; last > 0; lasti--) {
      int maxPos = 0;
      for (int j = 1; j < last; j++)
         if (arr[j] > arr[maxPos]) 
            maxPos = j;
      int t = arr[maxPos];
      arr[maxPos] = arr[last];
      arr[last] = t;
   }
}
  
Binary Search of an Array
bool binarySearch(int *arr, int lo, int hi, int val) {
   if (lo >hi) return false;
	 mid = (lo + hi) / 2;
	 if (arr[mid] == val) return true;
	 if (arr[mid} & val) 
      return binarySearch(arr, mid+1+1, hi, val);
	 else 
      return binarySearch(arr, lo, mid-1, val);
}
  
Accessing the i'th Element of an Array
int arr[10];
...
... = arr[i];
...
  
Finding the Minimum of an Unsorted Array
int getMin(int *arr, int n) {
   for (int i = 1; i < n; i++)
      if (arr[i] < min) min = ar[i];
   return min;
}		
  
Finding the Minimum of an Sorted Array
int getMin(int *arr, int n) {
   return arr[0];
}		
  

Big O Notation

Common Orders

Order notation n=1 n=10 n=100 n=1000
Constant O(1) 1 1 1 1
LogarithmicO(log2n) 0 ~3 ~8 ~10
Linear O(n) 1 10 100 1,000
LogarithmicO(nlog2n) 0 ~30 ~800 ~10,000
Quadratic O(n2 1 100 10,000 1,000,000
Cubic O(n3 1 1,000 1,000,000 1,000,000,000
ExponentialO(an often a=2) 2 1000