Buscar

como colocar o Quicksort para ordenar em ordem decrescente?

public void Quicksort(float v[], int esq, int dir){
int pivo;
if(esq < dir){
pivo = Separar(v, esq, dir);
Quicksort(v, esq, pivo - 1);
Quicksort(v, pivo + 1, dir);
}
}

public static int Separar(float vet[], int esq, int dir){
int i = esq + 1, j = dir;
float c = vet[esq], troca;
while(i <= j){
if(vet[i] <= c)
i++;
else if(c < vet[j])
j--;
else{
troca = vet[i];
vet[i] = vet[j];
vet[j] = troca;
}
}
i = j + 1;
vet[esq] = vet[j];
vet[j] = c;
return j;
}

💡 4 Respostas

User badge image

Joao Andre MArtins Dias

Amigo  creio eu, que se trocar as perguntas por (if vet[i]>=c) e if(c>vet[j]) e a chamada por if(esq>dir) deve funcionar.

 

0
Dislike1
User badge image

Andre Smaira

como colocar o Quicksort para ordenar em ordem decrescente?

public void Quicksort(float v[], int esq, int dir){

int pivo;

if(esq < dir){

pivo = Separar(v, esq, dir);

Quicksort(v, esq, pivo - 1);

Quicksort(v, pivo + 1, dir);

}

}

public static int Separar(float vet[], int esq, int dir){

int i = esq + 1, j = dir;

float c = vet[esq], troca;

while(i <= j){

if(vet[i] <= c)

i++;

else if(c < vet[j])

j--;

else{

troca = vet[i];

vet[i] = vet[j];

vet[j] = troca;

}

}

i = j + 1;

vet[esq] = vet[j];

vet[j] = c;

return j;

}


Para a resolução desta tarefa foram utilizados conhecimentos sobre C.


A única alteração necessária será trocar dois caracteres da função Separar, no primeiro IF ao invés de usar (vet[i] <= c) deve-se usar (vet[i] >=c) e no segundo IF fazer o mesmo, ao invés de (c < vet[j]) utilizar (c > vet[j]), como no exemplo abaixo:


int Separar(int vet[], int esq, int dir){

int i = esq + 1, j = dir;

int c = vet[esq], troca;

while(i <= j){

if(vet[i] >= c)

i++;

else if(c > vet[j])

j--;

else{

troca = vet[i];

vet[i] = vet[j];

vet[j] = troca;

}

}

i = j + 1;

vet[esq] = vet[j];

vet[j] = c;

return j;

}


Após efetuar esta mudança o quickSort ordenará o vetor em ordem decrescente.


Basta apenas trocar o sinal < pelo sinal > nos dois IF’s da função Separar.

0
Dislike0
User badge image

Andre Smaira

Para a resolução desta tarefa foram utilizados conhecimentos sobre C.


A única alteração necessária será trocar dois caracteres da função Separar, no primeiro IF ao invés de usar (vet[i] <= c) deve-se usar (vet[i] >=c) e no segundo IF fazer o mesmo, ao invés de (c < vet[j]) utilizar (c > vet[j]), como no exemplo abaixo:


int Separar(int vet[], int esq, int dir){

int i = esq + 1, j = dir;

int c = vet[esq], troca;

while(i <= j){

if(vet[i] >= c)

i++;

else if(c > vet[j])

j--;

else{

troca = vet[i];

vet[i] = vet[j];

vet[j] = troca;

}

}

i = j + 1;

vet[esq] = vet[j];

vet[j] = c;

return j;

}


Após efetuar esta mudança o quickSort ordenará o vetor em ordem decrescente.


Basta apenas trocar o sinal < pelo sinal > nos dois IF’s da função Separar.

0
Dislike0

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

✏️ Responder

SetasNegritoItálicoSublinhadoTachadoCitaçãoCódigoLista numeradaLista com marcadoresSubscritoSobrescritoDiminuir recuoAumentar recuoCor da fonteCor de fundoAlinhamentoLimparInserir linkImagemFórmula

Para escrever sua resposta aqui, entre ou crie uma conta

User badge image

Outros materiais