Я понимаю, что это не стандартная сортировка, как указано в CLRS, но что делает моя упрощенная версия недостаточной, чем у стандартной сортировки? Я реализую только свои целые положительные числа, но это должно быть довольно легко настроить (используя карты).Изменение алгоритма сортировки счета?
def count_sort(array):
maximum = max(array)
minimum = min(0, min(array))
count_array = [0]*(maximum-minimum+1)
for val in array:
count_array[val] += 1
sorted_array = []
for i in range(minimum, maximum+1):
if count_array[i] > 0:
for j in range(0, count_array[i]):
sorted_array.append(i)
return sorted_array
array = [3,2,-1,1,5,0,10,18,25,25]
print array
print count_sort(array)
Edit: Причина, почему я думал, что это не был стандартный подсчет рода потому, что алгоритм рассматривается в лекции MIT OpenCourseWare казался немного сложнее (http://youtu.be/0VqawRl3Xzs?t = 34m54s).
Что заставляет вас думать, это не считается сортировкой? Это выглядит совершенно справедливо для меня. – templatetypedef
Да, я тоже не вижу проблемы. FWIW, вам даже не нужны карты для обработки отрицательных чисел - просто создайте достаточно большой 'count_array', чтобы удержать их все, и пусть отрицательные индексы обернутся. –
Есть особая причина не использовать встроенный 'max()'? –