我意識到這不是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