Бывают моменты, когда ваше глубокое понимание ваших данных может привести к гораздо более эффективным алгоритмам сортировки, чем любой доступный алгоритм общего назначения. Я поделился примером такой ситуации в другом посте в SO, но я поделюсь им, чтобы привести конкретный пример:
Еще во времена COBOL, FORTRAN и т. Д. Разработчик, работавший на телефонную компанию, должен был взять относительно большой кусок данных, состоящий из активных телефонных номеров (я полагаю, это было в районе Нью-Йорка) и отсортировать этот список. В первоначальной реализации использовалась сортировка кучи (это были 7-значные телефонные номера, и во время сортировки происходила большая замена диска, поэтому сортировка кучи имела смысл).
В конце концов, разработчик наткнулся на другой подход: осознав, что в его наборе данных может существовать один и только один из каждого телефонного номера, он понял, что ему не нужно хранить сами номера телефонов в памяти. Вместо этого он рассматривал все 7-значное пространство телефонных номеров как очень длинный битовый массив (при 8 телефонных номерах на байт для 10 миллионов телефонных номеров требуется чуть более одного мегабайта для захвата всего пространства). Затем он сделал один проход через свои исходные данные и установил бит для каждого найденного им телефонного номера равным 1. Затем он сделал последний проход через битовый массив в поисках старших бит и вывел отсортированный список телефонных номеров.
Этот новый алгоритм был намного, намного быстрее (по крайней мере, в 1000 раз быстрее), чем алгоритм сортировки кучи, и занимал примерно столько же памяти.
Я бы сказал, что в этом случае для разработчика имело смысл разработать собственный алгоритм сортировки.
Если ваше приложение предназначено для сортировки, и вы действительно знаете свое проблемное пространство, то вполне возможно, что вы придумаете алгоритм для конкретного приложения, который превосходит любой алгоритм общего назначения.
Однако, если сортировка является вспомогательной частью вашего приложения, или вы просто реализуете алгоритм общего назначения, очень велики шансы, что некоторые чрезвычайно умные типы университетов уже предоставили алгоритм, который лучше, чем вы будете в состоянии придумать. Быструю сортировку действительно сложно превзойти, если вы можете хранить вещи в памяти, а сортировка кучи довольно эффективна для упорядочения массивных данных (хотя я лично предпочитаю использовать реализации типа B + Tree для кучи, поскольку они настроены на разбиение на страницы диска производительность).