Ordenação de vetor em forma decrescente

1. Ordenação de vetor em forma decrescente

Bruno
DovahBruno

(usa Linux Mint)

Enviado em 23/08/2016 - 19:50h

Olá, estou tendo um problema aqui com meu código, onde já tentei de tudo, mas o vetor não é ordenado de forma decrescente, através do QuickSort, se alguém puder dar uma dica agradeço desde já.

Parte do código onde tenho problemas (Sim, é uma função. E sim, essa é da parte crescente, que funciona perfeitamente):
void quick_crescente(int *pt, int inicio, int fim) {

int pivo, aux, i, j, meio;

//Prepara as variaveis para a ordenação
i = inicio;
j = fim;

meio = (int)((i + j) / 2);
pivo = pt[meio];

do {
//Verifica se o inicio e o fim já chegaram no meio para poder terminarem
while (pt[i] < pivo)
i = i + 1;
while (pt[j] > pivo)
j = j - 1;

//Troca as posições dos numeros do vetor, caso necessario | aux = Variavel auxiliar para guardar o vetor por um instante
if (i <= j) {
aux = pt[i];
pt[i] = pt[j];
pt[j] = aux;
i = i + 1;
j = j - 1;
printf("[%d][%d] ", pt[i], pt[j]);
}
//Condição de existencia, quando J e I forem iguais ou j < i o algoritmo pula fora
} while (j > i);

if (inicio < j)
quick_crescente(pt, inicio, j);
if (i < fim)
quick_crescente(pt, i, fim);
}



  


2. Re: Ordenação de vetor em forma decrescente

Paulo
paulo1205

(usa Ubuntu)

Enviado em 24/08/2016 - 08:14h

Basta trocar os sinais nos whiles que fazem as comparações de pt[i] e pt[j] com pivo: onde, para a ordenação crescente, você usa maior que, troque por menor que, e vice-versa.


3. Re: Ordenação de vetor em forma decrescente

Bruno
DovahBruno

(usa Linux Mint)

Enviado em 26/08/2016 - 15:06h

paulo1205 escreveu:

Basta trocar os sinais nos whiles que fazem as comparações de pt[i] e pt[j] com pivo: onde, para a ordenação crescente, você usa maior que, troque por menor que, e vice-versa.


Muito obrigado, eu já estava ficando louco com esse código, sabia que tinha que inverter alguma parte dele, mas nada do que eu testava funcionava.


4. Re: Ordenação de vetor em forma decrescente

Bruno
DovahBruno

(usa Linux Mint)

Enviado em 26/08/2016 - 15:16h

DovahBruno escreveu:

paulo1205 escreveu:

Basta trocar os sinais nos whiles que fazem as comparações de pt[i] e pt[j] com pivo: onde, para a ordenação crescente, você usa maior que, troque por menor que, e vice-versa.


Muito obrigado, eu já estava ficando louco com esse código, sabia que tinha que inverter alguma parte dele, mas nada do que eu testava funcionava.


Mas agora tenho um pequeno probleminha, ao testar com valores pré-definidos do vetor, o código funcionou perfeitamente, mas ao alterar para números aleatórios, o programa segue crashando. Como não estou com o Visual Studio instalado, para verificação minuciosa do código, não tenho como testar qual a parte que está dando problema.

Pastebin do código (Sim, é bem grande): http://pastebin.com/MjUPPKvh


5. Re: Ordenação de vetor em forma decrescente

Paulo
paulo1205

(usa Ubuntu)

Enviado em 26/08/2016 - 18:04h

Infelizmente o PasteBin é bloqueado aqui onde estou. Só vou poder olhar o código quando chegar a casa.


6. Re: Ordenação de vetor em forma decrescente

Paulo
paulo1205

(usa Ubuntu)

Enviado em 27/08/2016 - 02:47h

Eu disse para inverter apenas o sinal da comparação entre o pivô e os elementos à esquerda e à direita, não para mudar o sentido do deslocamento do ponteiro. Veja que você começa com i=inicio;, e depois condicionalmente faz i retroceder ainda mais. Você há de convir que não faz sentido ir para antes do início.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts