The document describes the merge sort algorithm. It works by dividing an input array into two halves, recursively sorting the halves, and then merging the sorted halves back together. The algorithm has a runtime of Θ(nlog(n)) in all cases. Pseudocode and implementations in C++, Java, and Python are provided to illustrate how merge sort divides, sorts, and merges the array halves.