The analysis of an algorithm describe how the running time of the algorithm behaves as a function of the size of the input. In this chapter, the authors illustrate the basic ideas by looking at a simple sorting algorithm called InsertionSort. In combinatorial algorithms, the choice of data structure can greatly affect the efficiency of an algorithm. Most combinatorial problems are big — bigger than can be handled on most computers — and hence the development of fast algorithms is very important. The authors discuss some useful data structures that the people will use in combinatorial algorithms. More thorough discussions of data structures are given in the many available textbooks on data structures and algorithms. The authors also discuss the mathematical analysis of algorithms. There are several convenient data structures for storing graphs.