Это дополнительный ответ к @perreal. Я пытался опубликовать это как комментарий, но это слишком долго. @perreal правильно указывает, когда сортировка ведра имеет смысл. Разные ответы делают разные предположения о том, какие данные сортируются. НАПРИМЕР. если сортируемые ключи являются строками, то диапазон возможных ключей будет слишком большим (больше, чем массив сегментов), и нам нужно будет использовать только первый символ строки для позиций сегмента или какой-либо другой стратегии. Отдельные корзины должны быть отсортированы, потому что они содержат элементы с разными ключами, что приводит к O (n ^ 2).
Но если мы сортируем данные, где ключи являются целыми числами в известном диапазоне, то сегменты всегда уже отсортированы, потому что ключи в блоке равны, что приводит к линейной сортировке по времени. Сортируются не только сегменты, но и сортировка stable , поскольку мы можем извлекать элементы из массива сегментов в порядке их добавления.
Я хотел бы добавить, что если вы сталкиваетесь с O (n ^ 2) из-за природы сортируемых ключей, сортировка по сегментам может быть неправильным подходом. Если у вас есть диапазон возможных ключей, который пропорционален размеру ввода, вы можете воспользоваться линейной сортировкой временных интервалов, если в каждом сегменте будет храниться только 1 значение ключа.