Вы, конечно, можете сделать что-то подобное.Вопрос в том, стоит ли это делать.
Подсчет сортировки имеет время выполнения O (n + U), где n - количество элементов в массиве, а U - максимальное значение.Обратите внимание, что по мере того, как U становится все больше и больше, время выполнения этого алгоритма начинает заметно ухудшаться.Например, если U> n и я добавлю еще одну цифру к U (например, изменив ее с 1 000 000 до 10 000 000), время выполнения может увеличиться в десять раз.Это означает, что сортировка по счету начинает становиться непрактичной, когда U становится все больше и больше, и поэтому вы обычно запускаете сортировку по счету, когда U довольно мала.Если вы собираетесь запустить сортировку с небольшим значением U, то использование хеш-таблицы не обязательно стоит затрат.Хэширование элементов стоит больше циклов ЦП, чем просто поиск в стандартных массивах, а для небольших массивов потенциальная экономия памяти может не стоить дополнительного времени.И если вы используете очень большое значение U, вам лучше переключиться на сортировку по основанию, которая, по сути, представляет собой множество меньших проходов сортировки с очень маленьким значением U.
Другая проблемав том, что шаг повторной сборки сортировки подсчета имеет удивительную локальность ссылок - вы просто сканируете массив счетчиков и входной массив параллельно, заполняя значения.Если вы используете хеш-таблицу, вы теряете часть этой локализации, потому что th-элементы в хеш-таблице не обязательно хранятся последовательно.
Но это больше аргументы реализации, чем что-либо еще.По сути, сортировка при подсчете сводится не столько к «использованию массива», сколько к «построению частотной гистограммы». Это просто тот случай, когда обычный старый массив обычно предпочтительнее хеш-таблицы при построении этой гистограммы.