Part I: Foundations
Chapter 1: The Role of Algorithms in Computing
Chapter 2: Getting Started
Chapter 3: Characterizing Running Times
Chapter 4: Divide-and-Conquer
Part II: Sorting and Order Statistics
Introduction to Sorting
Chapter 6: Heapsort
Chapter 7: Quicksort
Chapter 8: Sorting in Linear Time
Chapter 9: Medians and Order Statistics
Part III: Data Structures1
Introduction to Dynamic Sets
Chapter 10: Elementary Data Structures
Chapter 11: Hash Tables
Chapter 12: Binary Search Trees
Chapter 13: Red-Black Trees
Part IV: Advanced Design and Analysis Techniques
Introduction to Advanced Techniques
Chapter 14: Dynamic Programming
Chapter 15: Greedy Algorithms
Chapter 16: Amortized Analysis
Part V: Advanced Data Structures
Introduction to Advanced Data Structures
Chapter 17: Augmenting Data Structures
Chapter 18: B-Trees
Chapter 19: Data Structures for Disjoint Sets
Part VI: Graph Algorithms
Introduction to Graph Problems
Chapter 20: Elementary Graph Algorithms
Chapter 21: Minimum Spanning Trees
Chapter 22: Single-Source Shortest Paths
Chapter 23: All-Pairs Shortest Paths
Chapter 24: Maximum Flow
Chapter 25: Matchings in Bipartite Graphs
Part VII: Selected Topics
Introduction to Selected Topics
Chapter 26: Parallel Algorithms
Chapter 27: Online Algorithms
Chapter 28: Matrix Operations
Chapter 29: Linear Programming
Chapter 30: Polynomials and the FFT
Chapter 31: Number-Theoretic Algorithms
Chapter 32: String Matching
Chapter2 33: Machine-Learning Algorithms
Chapter 34: NP-Completeness
Chapter 35: Approximation Algorithms