1
1http://xkcd.com/1185/ CS 1331 (Georgia Tech) Algorithms 1 / 21
1 http://xkcd.com/1185/ CS 1331 (Georgia Tech) Algorithms 1 / 21 - - PowerPoint PPT Presentation
1 1 http://xkcd.com/1185/ CS 1331 (Georgia Tech) Algorithms 1 / 21 Introduction to Object-Oriented Programming Algorithms Christopher Simpkins chris.simpkins@gatech.edu CLRS CS 1331 (Georgia Tech) Algorithms 2 / 21 Algorithms An
1
1http://xkcd.com/1185/ CS 1331 (Georgia Tech) Algorithms 1 / 21
CS 1331 (Georgia Tech) Algorithms 2 / 21
CS 1331 (Georgia Tech) Algorithms 3 / 21
CS 1331 (Georgia Tech) Algorithms 4 / 21
1 for j = 2 to A.length // A[1 .. A.length] is an array 2 key = A[j] 3 // Insert A[j] into the sorted sequence A[1 .. j - 1]. 4 i = j - 1 5 while i > 0 and A[i] > key 6 A[i + 1] = A[i] 7 i = i - 1 8 A[i + 1] = key
CS 1331 (Georgia Tech) Algorithms 5 / 21
CS 1331 (Georgia Tech) Algorithms 6 / 21
1 for j = 2 to A.length 2 key = A[j] 3 // Insert A[j] into the sorted sequence A[1 .. j - 1]. 4 i = j - 1 5 while i > 0 and A[i] > key 6 A[i + 1] = A[i] 7 i = i - 1 8 A[i + 1] = key
CS 1331 (Georgia Tech) Algorithms 7 / 21
for (int j = 1; j < a.length; ++j) { assert isSorted(a, 0, j - 1); int key = a[j]; int i = j - 1; while(i >= 0 && a[i] > key) { a[i + 1] = a[i]; i = i - 1; } a[i + 1] = key; }
$ java -ea InsertionSort
CS 1331 (Georgia Tech) Algorithms 8 / 21
CS 1331 (Georgia Tech) Algorithms 9 / 21
// A is an array, and v is the value we’re searching for LINEAR-SEARCH(A, v): for i = 1 to A.length if A[i] = v then return i return -1
CS 1331 (Georgia Tech) Algorithms 10 / 21
CS 1331 (Georgia Tech) Algorithms 11 / 21
CS 1331 (Georgia Tech) Algorithms 12 / 21
BINARY-SEARCH(A, v): p := 1, r := A.length while p ≤ r q := ⌊(p + r)/2⌋ if A[q] = v then return q if A[q] > v then r := q - 1 else p = q + 1 return -1
CS 1331 (Georgia Tech) Algorithms 13 / 21
CS 1331 (Georgia Tech) Algorithms 14 / 21
j=2 j
j=2(j − 1)
j=2(j − 1)
1 x = n(n−1) 2
2n(n + 1),
CS 1331 (Georgia Tech) Algorithms 15 / 21
for i := 1 to n // ...
for (int i = 0; i < n; i++) { // ... }
CS 1331 (Georgia Tech) Algorithms 16 / 21
for i := 1 to n for j := 1 to n
for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { // ... } }
CS 1331 (Georgia Tech) Algorithms 17 / 21
for i := 1 to n for j := 1 to i
for (int i = 0; i < n; i++) { for (int j = 0; j < i; j++) { // ... } }
1 x = n(n−1) 2
2n(n + 1) = 1 2n2 + 1 2n
CS 1331 (Georgia Tech) Algorithms 18 / 21
p := 1, r := n while p ≤ r // cut difference between p and r in half until it’s 0...
int lo = 0, hi = array.length - 1; while (lo <= hi) { int middle = (lo + hi)/2; // either lo becomes middle + 1, or hi becomes middle - 1 }
2 each time.
2
CS 1331 (Georgia Tech) Algorithms 19 / 21
p := 1, r := n while p ≤ r // cut difference between p and r in half until it’s 0...
2:
CS 1331 (Georgia Tech) Algorithms 20 / 21
CS 1331 (Georgia Tech) Algorithms 21 / 21