Linear-time Sorting: Lower Bounds, Counting Sort, Radix Sort