<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">lista = [2,5,3,0,2,3,0,3]

def Countingsort(lista):
    # a entrada e uma lista desordenada.
    k = maximo(lista)
    # a variavel k armazena o maior elemento contido na lista
    B = [0 for w in range(len(lista))]
    # a linha de codigo acima, cria um vetor B do tamanho da lista desordenada. este vetor recebera os elementos da lista ja ordenados
    C = [0 for w in range(k+1)]
    # a linha de codigo acima, cria um vetor vazio(contendo apenas zeros) do tamanho do maior elemento contido na lista + 1

    for j in range(0,len(lista)):
        C[lista[j]] = C[lista[j]] + 1

    for i in range(1,k+1):
        C[i] = C[i] + C[i-1]

    for j in range(len(lista)-1,0,-1):
        B[C[lista[j]]-1] = lista[j]
        C[lista[j]] = C[lista[j]] - 1
    return B   


#____________________

def maximo(lista):
    """ Esta eh a funcao maxmin3 utilizada para encontrar o
        menor e o maior numero de uma lista de inteiros desordenada.
        Alem disso, indica o total de comparacoes efetuadas
        para tanto.
        Caso a lista fornecida nao seja vazia, esta funcao
        retorna uma lista com tres elementos:
        - Elemento 0: menor numero da lista fornecida;
        - Elemento 1: maior numero da lista fornecida;
        - Elemento 2: total de comparacoes efetuadas.
        Apresenta a melhor solucao para este tipo de problema. """

    # Corpo principal da funcao maxmin3 
    n = len(lista)
    if n == 0: return []

    if (n % 2) &gt; 0: # se n for impar
        lista.append(lista[n-1])
        fimDoAnel = n - 1 # Em Python o primeiro indice e zero!
    else: fimDoAnel = n - 2  # Em Python o primeiro indice e zero!  

    if lista[0]&gt;lista[1]:
        max = lista[0]
        min = lista[1]
    else:
        max = lista[1]
        min = lista[0]
    
    total_comp = 1
    i = 2 # Em Python o primeiro indice e zero!
    while i &lt;= fimDoAnel:
        total_comp += 1
        if lista[i] &gt; lista[i+1]:
            if lista[i] &gt; max: max = lista[i]
            if lista[i+1] &lt; min: min = lista[i+1]
        else:
            if lista[i] &lt; min: min = lista[i]
            if lista[i+1] &gt; max: max = lista[i+1]
        total_comp += 2
        i += 2

    maximo = max
    return maximo


#_______________


def Teste_cs(lista):
    # a entrada e uma lista desordenada.
    k = maximo(lista)
    # a variavel k armazena o maior elemento contido na lista
    B = [0 for w in range(len(lista))]
    # a linha de codigo acima, cria um vetor B do tamanho da lista desordenada. este vetor recebera os elementos da lista ja ordenados
    C = [0 for w in range(k+1)]
    # a linha de codigo acima, cria um vetor vazio(contendo apenas zeros) do tamanho do maior elemento contido na lista + 1
    print '\nA lista possui %d elementos: '%len(lista)
    print '--&gt; ',lista

    print '\nO maior elemento da lista e: ', k

    print '\nEste e o vetor B inicial (Tamanho = tamanho da lista inicial): '
    print '--&gt; ',B

    print '\nEste e o vetor C inicial (Tamanho = maior elemento + 1): '
    print '--&gt; ',C
    
    for j in range(0,len(lista)):
        C[lista[j]] = C[lista[j]] + 1

    print '\nAgora o vetor C contem o numero de vezes que cada elemento aparece na lista inicial: '
    print '--&gt; ',C,'Quantidade de vezes que o elemento aparece na lista!'
    print'--&gt; ',range(0,k+1),'Possiveis elementos da lista inicial!'

    for i in range(1,k+1):
        C[i] = C[i] + C[i-1]

    print '\nAgora o vetor C contem o numero de elementos menores que ou iguais a I: '
    print '--&gt;  ',C,'Elementos menores ou iguais a i na lista!'
    print'--&gt; I',range(0,k+1),'Possiveis elementos da lista inicial!'

    for j in range(len(lista)-1,-1,-1):
        B[C[lista[j]]-1] = lista[j]
        C[lista[j]] = C[lista[j]] - 1

    print "\nE, finalmente, esta eh a lista ordenada: "
    print B
</pre></body></html>