Да, но только если элементы являются (или могут быть представлены как) целыми числами, и если количество элементов между самым маленьким и самым большим элементом достаточно близко к разнице между ними, в этом случае вы можете использовать bucket sort , что приводит к O (n) сложности времени, где n - это разница между самым маленьким и самым большим предметом. Это было бы более эффективно, чем использование других алгоритмов сортировки, со средней сложностью по времени O (n log n) .
В случае List = [1, 4, 5, 2, 6, 7, 9, 3]
, как в вашем вопросе, действительно, более эффективно использовать сортировку по сегменту, когда известно, что 1
- это наименьший элемент, а 9
- наибольший, поскольку между диапазонами отсутствует только 8
. В следующем примере используется collections.Counter
для учета возможности того, что в списке ввода могут быть дубликаты:
from collections import Counter
counts = Counter(List)
print(list(Counter({i: counts[i] for i in range(1, 10)}).elements()))
Это выводит:
[1, 2, 3, 4, 5, 6, 7, 9]