我意识到这不是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)
编辑:为什么我认为这是没有标准计数排序是因为盖在麻省理工学院开放式讲座的算法似乎稍微复杂的原因(http://youtu.be/0VqawRl3Xzs?t = 34m54s)。
什么让你觉得这不算数?这对我来说完全有效。 – templatetypedef 2012-02-14 08:56:58
是的,我也没有看到问题。 FWIW,你甚至不需要使用地图来处理负数 - 只需创建一个足够大的'count_array'来容纳它们,并让负指数环绕。 – 2012-02-14 09:42:07
没有使用内建的'max()'有一个特别的原因? – 2012-02-14 09:48:39