カウントソート(python)


def counting_sort(A, k):
    '''
    Params:
        list[int] A,       ,            
        int k,   A      
    '''
    #  A  
    N = len(A)
    #    ,      k
    C = [0 for i in range(k+1)]
    #         
    B = [0 for i in range(N)]
    #            
    for i in range(N):
        C[A[i]] += 1
    #                   ,     (   0   )
    for i in range(1, len(C)):
        C[i] += C[i-1]
    #     A     ,        B    
    for i in range(N):
        #C[A[i]]             ,  B        -1
        B[C[A[i]]-1] = A[i]
        #C    -1
        C[A[i]] -= 1
    return B

空間消費が大きく、10個の配列があると仮定し、最大数が100000であると仮定すると、長さが100000+1の配列を作成する必要がある時間の複雑さはO(n)である.