Heap Sort has complexity $\mathcal{O}(n\lg(n))$ and Quick Sort with some tuning (choosing the pivot in a random order) on average also sorts in $\mathcal{O}(n\lg(n))$ and both of these are tight upper bounds.
1) So between the two algorithms which one should be used and why? Which one has smaller constant factors?
2) I know quick sort sorts in place . What about memory requirements for Heap sort?