This document discusses algorithms for sorting and searching data structures. It introduces binary search, which can search an ordered array in O(log n) time by recursively searching either the left or right half of the array. Quicksort is also discussed, which works by recursively sorting partitions of the array around a pivot element. In the average case, quicksort runs in O(n log n) time, but in the worst case of an already sorted array it runs in O(n^2) time. The document covers methods for solving algorithm recurrences like substitution, iteration, and the master method, and applies these techniques to analyze the time complexity of binary search and quicksort.