Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
/*É recomendado usar esse algoritmo quando há muitos elementos repetidos em um array, que no caso é mais eficiente que o sort da Algorithm, que também darei exemplo de uso no fim desse programa*/ #include <iostream> #include <cstdio> using namespace std; /*Ele recebe o vetor, o seu tamanho, e o maior número que esse vetor pode ter (limite que é dado no problema)*/ void counting (int a[], int n, int m) { int *aux=new int[m]; for (int i=0;i<m;i++) aux[i]=0; for (int i=0;i<n;i++) aux[a[i]]++; int sum = 0; for(int i = 1; i < m; i++){ int dum = aux[i]; aux[i] = sum; sum += dum; } int *ordenado = new int[n]; for(int i = 0; i < n; i++){ ordenado[aux[a[i]]] = a[i]; aux[a[i]]++; } for (int i = 0; i < n; i++){ a[i] = ordenado[i]; } } int main() { int v[10]={10,23,11,10,23,23,11,20,11,10}; counting(v,10,24); for (int i=0;i<10;i++) printf("%d ",v[i]); printf("\n"); return 0; } /*Há também uma função da biblioteca 'algorithm' que realiza a ordenação dos elementos de maneira eficiente, que se chama sort, se implementa da seguinte forma:*/ #include <iostream> #include <algorithm> //biblioteca da função sort using namespace std; int main (){ int v[10]={2, 21, 1, 32, 10, 12, 331, 0, 6, 3} int n=10; sort(v, v+n);//v->inicio do array, v+n, fim do array que tem n elementos; /*A função sort não é estável, então caso o problema necessite que os elementos não percam sua ordem caso sejam iguais, se usa a função stable_sort, que tem a notação idêntica à da sort*/ stable_sort(v, v+n); for (int i=0; i<n; i++) cout << v[i] << " "; cout << endl; /*Só para relembrar, caso o problema seja um caso onde o array terá muitos elementos são repetidos, é melhor o uso do método countin sort, que é o mais eficiente para esse caso.*/ return 0; }
Compartilhar