Heap sort turns the slice into a max-heap with heapify, then swaps the largest item (the root) to the end of the shrinking heap and restores the heap. It has a guaranteed O(n log n) bound and needs no buffer, but it jumps around memory and usually does more comparisons than quicksort or merge sort.