I don't think I have ever implemented a sort. What modern tooling doesn't provide a sort? Even C has qsort.
(Semi-serious question, as you're quite right that hardly anyone ever needs to write a sort routine by hand these days.)
- Recursion and induction (mergesort, quicksort)
- Lower bounds on running time (O(n log n))
- Data structures (heaps in the context of heapsort, binary search trees in the context of treesort, tries in the context of radix sort, etc.)
- Difference between worst case and average case (quicksort)
- The role of the hidden coefficient in O notation (insertion sort is fast for small n even though its running time is O(n^2))
Etc.