## sorting
* **inversions** in a sequence are pair of elements that are out of order with respect to the ordering relation. a sorting algorithm is a sequence of operations that reduces inversions to zero.
* a **topological sort** of a directed graph is a way of ordering the list of nodes such that if `(a, b)` is an edge of the graph, then `a` appears before `b`. this type of sorting does not work if a graph has cycles or is not directed.
* because of their efficiencies, you usually want to use either merge sort or quick sort (`O(N log (N)`).
* other type of sorting algorithms can be seen below and in this directory's source code: