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;
}
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.
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.
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.
Para escrever sua resposta aqui, entre ou crie uma conta
Programação Orientada A Objetos
•UNIASSELVI IERGS
Programação Orientada A Objetos
Compartilhar