Cosmological N-Body simulations have become an essential tool for studying formation of large scale structure. These simulations are computationally challenging even though the available computing power gets better every year. A number of efficient algorithms have been developed to run large simulations with better dynamic range and resolution. We discuss key algorithms in this review, focusing on techniques used and their efficacy. N-Body simulations solve a model that is an approximation of the physical model to be simulated, we discuss limitations arising from this approximation and techniques employed for solving equations. Apart from simulating models of structure formation, N-Body simulations have also been used to study aspects of gravitational clustering. Simulating formation of galaxies requires us to take many physical process into account; we review numerical implementations of key processes.