天天看點

Counting Sort & Counting Sort by Given Rank

def counting_sort(array):
    max_elem=max(array)
    counts=[0 for i in range(max_elem+1)]
    for elem in array:
        counts[elem]+=1
    print(counts)
    return [i for i in range(len(counts)) for cnt in range(counts[i])]

array=[2,4,3,0,2,4,6,3,2,3,2,1,2,1,0]
result=counting_sort(array)
print(result)
           

Out: 

[2, 2, 5, 3, 2, 0, 1]

[0, 0, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 6]

#Counting Sort by Given Rank
def counting_sort_by(array,max_rank=None,rank=lambda x:x):
    if max_rank is None:
        max_rank=0
        for elem in array:
            if rank(elem)>max_rank:
                max_rank=rank(elem)
    counts=[[] for cnt in range(max_rank +1)]
    for elem in array:
        (counts[rank(elem)]).append(elem)
    print(counts)
    return [elem for sublist in counts for elem in sublist]

array=[2,4,3,0,2,4,6,3,2,3,2,1,2,1,0]
result=counting_sort_by(array,max_rank=None,rank=lambda x:x)
print(result)
           

Out:

[[0, 0], [1, 1], [2, 2, 2, 2, 2], [3, 3, 3], [4, 4], [], [6]]

[0, 0, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 6]

繼續閱讀