Apresentacao countingsort
Transcript of Apresentacao countingsort
Ordenação por Contagem
Algoritmo apresentado:
Counting Sort
COUNTING 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;
COUNTING SORT
Aspecto Negativo:
Necessita de dois vetores adicionais para sua execução, utilizando, assim, mais espaço na memória.
COUNTING SORT
Funcionamento:
A ordenação por contagem pressupõe que cada um dos n elementos do vetor de entrada é um inteiro entre 0 e k (k representa o maior inteiro presente no vetor).
A ideia 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.
ALGORITMOCOUNTING SORT
01 CountingSort(A, B, k)02 for i0 to k03 C[i] 004 for i1 to comprimento [A]05 C[A[i]]++06 for i1 to k07 C[i] += C[i-1]08 for i 0 to comprimento [A]09 B[C[A[i]]-1] = A[i]10 C[A[i]] -= 1
SIMULAÇÃ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).
0 0 0 0 0 0C =
0 1 2 3 4 5
B =
0 1 2 3 4 5 6 7
2 5 3 0 2 3 0 3A =
0 1 2 3 4 5 6 7
SIMULAÇÃO - COUNTING SORT
Se o valor de um elemento de entrada é i, incrementamos C[i]:
C[i] contém um número de elementos de entrada igual a i paracada i = 0,1,2,...,k.
2 0 2 3 0 1C =
0 1 2 3 4 5
Agora fazemos C[i] = C[i] + C[i-1] para determinarmos quantoselementos de entrada são menores que ou iguais a i, onde i inicia com 1.
2 2 4 7 7 8C =
0 1 2 3 4 5
SIMULAÇÃO - COUNTING SORT
Agora, partindo do menor para o maior índice, fazemosB[C[A[i]] -1] = A[i] Assim, colocamos cada elemento A[i] em suaPosição ordenada no vetor B:
Para i = 0 B[C[A[0]] -1] B[C[2] -1] B[4 -1] B[3] = A[0] B[3] = 2
Exemplo: 2 5 3 0 2 3 0 3A =
0 1 2 3 4 5 6 7
2 2 4 7 7 8C =
0 1 2 3 4 5
B =
0 1 2 3 4 5 6 7
SIMULAÇÃO - COUNTING SORT
Em seguida decrementamos o valor de C[A[j]] toda vez que Inserimos um valor no vetor B. isso faz com que o próximoelemento de entrada com valor igual a A[j], se existir, vá paraa posição imediatamente anterior a A[j] no vetor B.
C[3] = C[3] – 1:
2 2 4 7 7 8C =
0 1 2 3 4 5
2 2 3 7 7 8C =
0 1 2 3 4 5
SIMULAÇÃO - COUNTING SORT
Após as iterações de (comprimento de 0 até [k] ) temos o vetor desaída B ordenado!!!
0 0 2 2 3 3 3 5B =
0 1 2 3 4 5 6 7