

Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Algoritmos de Ordenações
Tipologia: Notas de estudo
1 / 3
Esta página não é visível na pré-visualização
Não perca as partes importantes!


1.3. Pseudocódigo e custo
N° Pseudocódigo Custo Comentário
COUNTING-SORT (A; B; n; k) 1 para i = 0 até k faça C[i] = 0 O(k) É criado um de trabalho e atribui o valor zero à todas posições do vetor auxiliar 2 para j = 1 até n faça C[A[j]] = C[A[j]] ++
O(n) Nessa etapa será feita a contagem do número de cada elemento do intervalo. Tipo, se o 1 aparece duas vezes, dentro da casa 1 será feito o incremento duas vezes. 3 para i = 1 até k faça C[i] = C[i] + C[i - 1]
O(k) Agora será feito o complemento de casas de cada valor. Ou seja, se na casa 1 existe um 3 (o número 1 se repete 3 vezes), os número da casa 2 só poderão ser guardados a partir da casa 4, então soma-se aos números da casa atual, os números da casa anterior. 4 para j = n decrescendo até 1 faça B[C[A[j]]] = A[j] C[A[j]] = C[A[j]] - 1
O(n) Agora será feito a alocação dos valores no vetor ordenado. A regra é a seguinte: faz-se a varredura do vetor inicial do final para o começo, o valor de A identifica o índice do vetor complementar C e o valor do deste é o
índice do vetor B, dentro do vetor B no índice apontado, será alocado o valor do índice A. 1.4. Código em C
#include <stdio.h> #include <stdlib.h>
int i = 0, j = 0;
int MAIOR_VALOR(int *Vetor_A, int tam){ int maior = 0;
for (i =0; i < tam; i++){ if (Vetor_A[i] > maior) maior = Vetor_A[i]; } return maior;
} // Fim_Função_MAIOR_VALOR
void COUNTING_SORT(int *A, int *B, int tam, int k){ int C[k]; // Declaração do vetor auxiliar
for(i = 0; i <= k; i++) C[i] = 0; // preenchendo o vetor C com zero for(j = 0; j < tam; j++) C[A[j]]= C[A[j]] + 1; // contagem cada elemento do intervalo for(i = 1; i <= k; i++) C[i] = C[i] + C[i-1]; // complemento de casas de cada valor
for(j = tam -1 ; j >= 0; j--) { // alocação dos valores no vetor ordenado int c = C[A[j]]; // recebe o valor do índice do vetor B B[c] = A[j]; // recebe o valor que ficará no índice C[A[j]] = C[A[j]] - 1; // decrementando o valor do vetor C[A[j]] }
} // Fim_função_COUNTING_SORT
int main() { int k = 0, tam = 0; int A[] = {2,5,3,0,2,3,0,5,3,0}; tam = sizeof(A) / sizeof(int); // cálculo do tamanho do vetor k = MAIOR_VALOR(A,tam); // cálculo do intervalo k printf("\nVetor A Desordenado:\n"); for(i = 0; i < tam; i++) printf("%d, ", A[i]); int B[tam]; // vetor ordenado COUNTING_SORT(A, B, tam, k); // Chamada da Função printf("\n\n\nVetor A Ordenado:\n"); for(i = 1; i <= tam; i++){ A[i] = B[i]; printf("%d, ", A[i]);