Title: UFRPE
1UFRPE Licenciatura em ComputaçãoCurso Prática
e Ensino de AlgoritmosProf. Breno Miranda e
Natália Flora
2Ordenação por Contagem
- Algoritmo apresentado
- Counting Sort
3COUNTING SORT
- Aspectos Positivos
- Ordena vetores em tempo linear para o tamanho do
vetor inicial - Não realiza comparações
- É um algoritmo de ordenação estável
4COUNTING SORT
- Aspecto Negativo
- Necessita de dois vetores adicionais para sua
execução, utilizando, assim, mais espaço na
memória.
5COUNTING SORT
- Funcionamento
- A ordenação por contagem pressupõe que cada um
dos n elementos do vetor de entrada é um inteiro
entre 1 e k (k representa o maior inteiro
presente no vetor). - A idéia básica é determinar, para cada elemento
de entrada x, o numero de elementos menores ou
iguais a x. Com essa informação é possível
determinar exatamente onde o elemento x será
inserido.
6EXEMPLO
5
9
2
0
7
2
8
9
5
A
1 2 3 4 5 6
7 8 9
7
B
1 2 3 4 5 6
7 8 9
- ? Na lista A acima o elemento circulado 7 possui
5 elementos menores que ele. Dessa forma o
elemento 7 deverá ser inserido no índice 6 (5
1) do vetor de saída B.
7ALGORITMOCOUNTING SORT
- 01 CountingSort(A, B, k)
- 02 for I?0 to k
- 03 do Ci? 0
- 04 for j?1 to comprimento A
- 05 do CAj? CAj 1
- 06 for I?2 to k
- 07 do Ci Ci Ci-1
- 08 for j? comprimento A downto 1
- 09 do BCAj Aj
- 10 CAj CAj - 1
8SIMULAÇÃO - COUNTING SORT
O algoritmo recebe um vetor desordenado como
entrada
Em seguida, gera os vetores adicionais B e C
? O vetor B é do mesmo tamanho do vetor A (8
elementos).
? O vetor C é do tamanho do maior elemento de A
1 (5 1 6).
9SIMULAÇÃO - COUNTING SORT
Se o valor de um elemento de entrada é i,
incrementamos Ci
- Ci contém um número de elementos de entrada
igual a i para - cada i 0,1,2,...,k.
Agora fazemos Ci Ci Ci-1 para
determinarmos quantos elementos de entrada são
menores que ou iguais a i
10SIMULAÇÃO - COUNTING SORT
Agora, partindo do maior para o menor índice,
fazemos BCAj Aj. Assim, colocamos cada
elemento Aj em sua Posição ordenada no vetor B
Exemplo
?Para j 8 BCA8 ? BC3 ? B7 B7
A8 ? B7 3
11SIMULAÇÃO - COUNTING SORT
Em seguida decrementamos o valor de CAj toda
vez que Inserimos um valor no vetor B. isso faz
com que o próximo elemento de entrada com valor
igual a Aj, se existir, vá para a posição
imediatamente anterior a Aj no vetor B.
C3 C3 1
12SIMULAÇÃO - COUNTING SORT
Após as iterações de (comprimento de A até 1)
temos o vetor de saída B ordenado!!!
13COUNTING SORT IN PYTHON
- def Countingsort(lista)
- k maximo(lista)
- B 0 for w in range(len(lista))
- C 0 for w in range(k1)
- for j in range(0,len(lista))
- Clistaj Clistaj 1
- for i in range(1,k1)
- Ci Ci-1
- for j in range(len(lista)-1,0,-1)
- BClistaj-1 listaj
- Clistaj Clistaj - 1
- return B
14REFERÊNCIAS BIBLIOGRÁFICAS
- CORMEN, T.H. LEISERSON, C.E. and RIVEST, R.L.
teoria e prática, 2002.