Buscar

Ordenação por Quick Sort

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

/*Abaixo do programa explico o uso da função sort, que pertence à biblioteca 'algorithm'*/
#include <iostream>
using namespace std;
void imprime (int v[], int n){
	
	for (int i=0;i<n;i++)
		cout << v[i] << " ";
	cout << endl;
	
}
//particiona o vetor a[esq...dir]
int particao(int a[], int esq, int dir)
{
	 int aux;
	 int i = esq;
	 int j = dir;
	 int pivo = a[(esq+dir)/2];
	 while(true) {
		 while(pivo>a[i]){ i++;} //procura algum <= pivô do lado esquerdo
		 while(pivo<a[j]){ j--;} //procura algum >= pivô do lado direito
		 if (i<j) {
			 aux = a[i]; //troca os elementos encontrados
			 a[i] = a[j];
			 a[j] = aux;
			 i++;
			 j--;
			
	 	 }
	 	 else
	 	 return j; //retorna o local onde foi feita a partição
 	 }
}
//ordena recursivamente o vetor a[esq...dir]
void quicksort(int a[], int esq, int dir)
{
	 if (esq<dir) {
		 int q = particao(a,esq,dir); //faz a partição
		 quicksort(a,esq,q); //ordena a partição esquerda
		 quicksort(a,q+1,dir); //ordena a partição direita
	 }
}
int main (){
	
	int n;
	cin >> n;
	int *v=new int[n];
	for (int i=0;i<n;i++)
		cin >> v[i];
	quicksort (v, 0, n-1);
	imprime(v,n);
	delete[](v);
	
	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;
	 
	return 0;
}

Teste o Premium para desbloquear

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

Outros materiais