我意识到这不是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)。

最佳答案

你在用你的最小值和最大值做一些奇怪的事情。试试这个:

def count_sort(array):
    maximum = max(array)
    minimum = min(array)
    count_array = [0]*(maximum-minimum+1)

    for val in array:
        count_array[val-minimum] += 1

    sorted_array = []
    for i in range(minimum, maximum+1):
        if count_array[i-minimum] > 0:
            for j in range(0, count_array[i-minimum]):
                sorted_array.append(i)

    print sorted_array

array = [3,2,-1,1,5,0,10,18,25,25]
print array
count_sort(array)

10-07 15:24