Buscar

Ordenação por Counting Sort

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;
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais