Erro em Métodos de Ordenação em C
Olá
Estou criando um código em C para ordenar valores de um vetor usando os métodos de ordenação Inserction Sort, Quick Sort e Bubble Sort. O código já está quase pronto, mas o método Quick Sort não está funcionando corretamente. Não sei o que pode estar errado.
Segue o código:
//Bibliotecas utilizadas
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#ifdef WIN32 //se for windows
#define limpa_tela system("cls") //limpa tela
#define espera Sleep(500) //tempo de delay
#else //senão, ex.: linux
#define limpa_tela system("/usr/bin/clear") //limpa tela
#define espera Sleep(1) //tempo de delay
#endif
//Função do quicksort, que recebe o limite
void quick_sort (int *nArray, int nLimite)
{
int nAnte, nProx, nMetade, nValAux, nAux;
//Testando o limite e pegando a metade
if (nLimite < 2)
return;
nMetade = nArray[nLimite / 2];
//fazendo um for duplo, diminuindo o próximo e aumentando o anterior
for (nAnte = 0, nProx = nLimite - 1;; nAnte++, nProx--)
{
//imprimindo os valores
for(nAux=0; nAux<=nLimite-1; nAux++)
{
printf("[%d]",nArray[nAux]);
espera;
}
printf("\n");
//enquanto for menor que a metade
while (nArray[nAnte] < nMetade)
nAnte++;
//enquanto a metade for menor que o próximo
while (nMetade < nArray[nProx])
nProx--;
//se o anterior é maior que o próximo quebra o laço
if (nAnte >= nProx)
break;
//fazendo troca de posições
nValAux = nArray[nAnte];
nArray[nAnte] = nArray[nProx];
nArray[nProx] = nValAux;
}
//Chamando rotina novamente em recursividade
quick_sort(nArray, nAnte);
quick_sort(nArray + nAnte, nLimite - nAnte);
}
main()
{
//declaração de variáveis
int nPos=0, nAux=0;
int nInd=0, nAtual=0;
int nTroca=0, nChave=0;
//Quantidade de casas do vetor
while((nPos<=0)||(nPos>100))
{
printf("\nQuantos numeros tera o vetor? ");
scanf("%d",&nPos);
}
//criando o vetor
int nVetor[nPos], nOrig[nPos], nOpc=-1;
//preenchendo os dados do vetor
for(nAux=0; nAux<=nPos-1; nAux++)
{
//preenchendo os dados do vetor
for(nAux=0; nAux<=nPos-1; nAux++)
{
nVetor[nAux] = -1;
//Enquanto não estiver no intervalo
while( (nVetor[nAux] <= -1) || (nVetor[nAux] >= 100) )
nVetor[nAux] = rand();
nOrig[nAux]=nVetor[nAux];
}
}
//Limpando a tela e pegando a opção
limpa_tela;
while((nOpc<=0)||(nOpc>=4))
{
printf("\n > Menu:");
printf("\n 1. Insercao | Inserction Sort");
printf("\n 2. Quick Sort | Quick Sort");
printf("\n 3. Troca | Bubble Sort");
printf("\n > Resposta: ");
scanf("%d",&nOpc);
}
printf("\nOrdenando:\n");
if(nOpc==1)
{
//Se for Inserction Sort
for ( nInd=1; nInd<nPos; nInd++)
{
for(nAux=0; nAux<=nPos-1; nAux++)
{
printf("[%d]",nVetor[nAux]);
espera;
}
nChave = nVetor[nInd];
nAtual = nInd-1;
while( nAtual>=0 && nVetor[nAtual]> nChave)
{
nVetor[nAtual+1] = nVetor[nAtual];
nAtual-=1;
nVetor[nAtual+1] = nChave;
}
printf("\n");
}
}
else if (nOpc==3)
{
//bubble - troca
nTroca = nPos - 1 ;
for(nInd = 0; nInd < nPos; nInd++)
{
for(nAux=0; nAux<=nPos-1; nAux++)
{
printf("[%d]",nVetor[nAux]);
espera;
}
for(nAtual = 0; nAtual < nTroca; nAtual++)
{
if(nVetor[nAtual] > nVetor[nAtual+1])
{
nAux = nVetor[nAtual];
nVetor[nAtual] = nVetor[nAtual+1];
nVetor[nAtual+1]=nAux;
}
}
nTroca--;
printf("\n");
}
}
//Resultado - Vetor Original
printf("\nOriginal: ");
for(nAux=0; nAux<=nPos-1; nAux++)
{
printf("[%d]",nOrig[nAux]);
espera;
}
//Resultado - Vetor Ordenado
printf("\nOrdenada: ");
for(nAux=0; nAux<=nPos-1; nAux++)
{
printf("[%d]",nVetor[nAux]);
espera;
}
//
printf ("\n\n");
system ("\n\npause");
}Se alguém puder me ajudar a descobrir o que eu fiz de errado, por que o Quick Sort não está funcionando, agradeço muito!
Discussão (2)
Carregando comentários...