Apresentacao countingsort

10
Ordenação por Contagem Algoritmo apresentado: Counting Sort

Transcript of Apresentacao countingsort

Page 1: Apresentacao countingsort

Ordenação por Contagem

Algoritmo apresentado:

Counting Sort

Page 2: Apresentacao countingsort

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;

Page 3: Apresentacao countingsort

COUNTING SORT

Aspecto Negativo:

Necessita de dois vetores adicionais para sua execução, utilizando, assim, mais espaço na memória.

Page 4: Apresentacao countingsort

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.

Page 5: Apresentacao countingsort

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

Page 6: Apresentacao countingsort

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

Page 7: Apresentacao countingsort

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

Page 8: Apresentacao countingsort

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

Page 9: Apresentacao countingsort

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

Page 10: Apresentacao countingsort

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