There is absolutely a time when your intimate understanding of your data can lead to much more efficient sorting algorithms than any general-purpose algorithm available. I shared an example of this situation in another post at SO, but I will share it just to provide an example-in-point:
In the days of COBOL, FORTRAN, etc. the developer working in the telephone company had to take a relatively large piece of data consisting of active phone numbers (I believe it was in the New York area) and sort this list. The initial implementation used heap sorting (these were 7-digit phone numbers, and many sorting operations took place during the sorting process to replace disks, so heap sorting made sense).
In the end, the developer came up with a different approach: realizing that one, and only one of each phone number could exist in his data set, he realized that he did not need to store the actual phone numbers in memory. Instead, he processed the entire 7-digit number of phone numbers as a very long bitmap (8 phone numbers per byte, 10 million phone numbers require a little more than a megabyte to capture the entire space). Then he made one pass through his original data and set a bit for each phone number that he found in 1. Then he made a final pass through a bit bit, which searches for high bits and displays a sorted list of phone numbers.
This new algorithm was much faster (at least 1000 times faster) than the heap sorting algorithm, and consumed approximately the same amount of memory.
I would say that in this case, the developer absolutely needs to develop his own sorting algorithm.
If your application is related to sorting, and you really know your problem space, then it is entirely possible that you will come up with an application-specific algorithm that is superior to any general purpose algorithm.
However, if sorting is an auxiliary part of your application or you just implement a general purpose algorithm, the chances are very, very good that some extremely smart university types have already provided an algorithm that is better than anything you can come up with. Quick sorting is really difficult if you can store things in memory, and heap sorting is very effective for massive sorting of the data set (although I personally prefer to use implementations like B + Tree for the b / c heap, which they are configured for disk paging )