This document discusses algorithms and their analysis. It begins by introducing algorithms and their importance in computer science. Sorting algorithms are used as an example to explain algorithm design. Insertion sort is presented as a specific sorting algorithm, including pseudocode for how it works and analysis of its best, average, and worst case time complexities, which are O(n), O(n^2) and O(n^2) respectively. Asymptotic notation is also introduced to describe an algorithm's growth rate regardless of lower order terms or constants.