I. Foundations.- 1. Machine Models: RAM and RASP.- 2. Randomized Computations.- 3. A High Level Programming Language.- 4. Structured Data Types.- 4.1 Queues and Stacks.- 4.2 Lists.- 4.3 Trees.- 5. Recursion.- 6. Order of Growth.- 7. Secondary Storage.- 8. Exercises.- 9. Bibliographic Notes.- II. Sorting.- 1. General Sorting Methods.- 1.1 Sorting by Selection, a First Attempt.- 1.2 Sorting by Selection: Heapsort.- 1.3 Sorting by Partitioning: Quicksort.- 1.4 Sorting by Merging.- 1.5 Comparing Different Algorithms.- 1.6 Lower Bounds.- 2. Sorting by Distribution.- 2.1 Sorting Words.- 2.2 Sorting Reals by Distribution.- 3. The Lower Bound on Sorting, Revisited.- 4. The Linear Median Algorithm.- 5. Exercises.- 6. Bibliographic Notes.- III. Sets.- 1. Digital Search Trees.- 1.1 Tries.- 1.2 Static Tries or Compressing Sparse Tables.- 2. Hashing.- 2.1 Hashing with Chaining.- 2.2 Hashing with Open Addressing.- 2.3 Perfect Hashing.- 2.4 Universal Hashing.- 2.5 Extendible Hashing.- 3. Searching Ordered Sets.- 3.1 Binary Search and Search Trees.- 3.2 Interpolation Search.- 4. Weighted Trees.- 4.1 Optimum Weighted Trees, Dynamic Programming, and Pattern Matching.- 4.2 Nearly Optimal Binary Search Trees.- 5. Balanced Trees.- 5.1 Weight-Balanced Trees.- 5.2 Height-Balanced Trees.- 5.3 AdvancedTopicson(a,b)-Trees.- 5.3.1 Mergable Priority Queues.- 5.3.2 Amortized Rebalancing Cost and Sorting Presorted Files.- 5.3.3 Finger Trees.- 5.3.4 Fringe Analysis.- 6. Dynamic Weighted Trees.- 6.1 Self-Organizing Data Structures and Their Amortized and Average Case Analysis.- 6.1.1 Self-Organizing Linear Lists.- 6.1.2 Splay Trees.- 6.2 D-trees.- 6.3 An Application to Multidimensional Searching.- 7. A Comparison of Search Structures.- 8. Subsets of a Small Universe.- 8.1 The Boolean Array (Bitvector).- 8.2 The O(log log N) Priority Queue.- 8.3 The Union-Find Problem.- 9. Exercises.- 10. Bibliographic Notes.- IX. Algorithmic Paradigms.