estou com o problema na hora de ordenar por qsort de ordenacao está certa mas como estou usando alocação dinamica, a referencia não esta sendo passada corretamente, se alguém puder me ajudar ficarei grato, abaixo está po codigo.
obrigado
#include <stdio.h>
#include <stdlib.h>
void limpa_tela(void);
int le_tam_vetor(void);
long *aloca_vetor(int qtde);
void preenche_vetor(long *vetor, int qtde);
void copia_vetor(long *vetor1, long *vetor2, int qtde);
void mostra_vetor(long *vetor, int qtde);
void desaloca_vetor(long *vetor);
void QSort (long *vetor, int ini, int fim);
int main(void){
int qtde,fim,i,ini=0;
long *ordenado, *desordenado;
qtde = le_tam_vetor();
fim=qtde;
ordenado = aloca_vetor(qtde);
desordenado = aloca_vetor(qtde);
preenche_vetor(desordenado, qtde);
printf("desordenado\n");
mostra_vetor(desordenado, qtde);
QSort(ordenado,ini,qtde);
mostra_vetor(ordenado,qtde);
desaloca_vetor(ordenado);
desaloca_vetor(desordenado);
return 0;
}
void limpa_tela(void){
system("cls");
}
int le_tam_vetor(void){
int tam;
do{
limpa_tela();
printf("Informe o tamanho do vetor: ");
scanf("%d%*c", &tam);
if(tam <=0 ){
printf("O tamanho do vetor deve ser maior do que zero!");
getchar();
}
}while(tam <=0);
return tam;
}
long *aloca_vetor(int qtde){
long *vetor;
vetor = (long *)calloc(qtde, sizeof(long));
if(!vetor){
limpa_tela();
printf("Erro na alocação de memoria.");
printf("Impossivel continuar a execucao.");
exit(0);
}
return vetor;
}
void desaloca_vetor(long *vetor){
free(vetor);
}
void preenche_vetor(long *vetor, int qtde){
int cont;
long valor;
srand(time(NULL)); //inicializa a geracao randomica de numeros
for(cont=0; cont<qtde; cont++){
valor = rand(); //rand() gera o num. randomico
vetor[cont] = valor;
}
}
void mostra_vetor(long *vetor, int qtde){
int cont;
for(cont=0; cont<qtde; cont++)
printf("%d\t", vetor[cont]);
getchar();
}
void QSort (long *vetor, int ini, int fim){
int i=ini;
int f=fim;
int pivo = vetor[ini];
int esq;
int aux;
esq=1;
if (fim > ini){
while (i < f) {
if (esq==1) {
if (vetor[f]<pivo){
aux=vetor[f];
vetor[f]=vetor[i];
vetor[i]=aux;
// esq=100;
i=i+1;
}
else
f=f-1;
}
else{
if (pivo<vetor[i]){
aux=vetor[f];
vetor[f]=vetor[i];
vetor[i]=aux;
esq=1;
f=f-1;
}
else
i=i+1;
}
}
QSort (vetor, ini, i-1);
QSort (vetor, i+1, fim);
}
}
Editado por Micheus Incluída tag's CODE para melhorar a visualização. Utilize a identação também ;)
Pergunta
bash
estou com o problema na hora de ordenar por qsort de ordenacao está certa mas como estou usando alocação dinamica, a referencia não esta sendo passada corretamente, se alguém puder me ajudar ficarei grato, abaixo está po codigo.
obrigado
#include <stdio.h> #include <stdlib.h> void limpa_tela(void); int le_tam_vetor(void); long *aloca_vetor(int qtde); void preenche_vetor(long *vetor, int qtde); void copia_vetor(long *vetor1, long *vetor2, int qtde); void mostra_vetor(long *vetor, int qtde); void desaloca_vetor(long *vetor); void QSort (long *vetor, int ini, int fim); int main(void){ int qtde,fim,i,ini=0; long *ordenado, *desordenado; qtde = le_tam_vetor(); fim=qtde; ordenado = aloca_vetor(qtde); desordenado = aloca_vetor(qtde); preenche_vetor(desordenado, qtde); printf("desordenado\n"); mostra_vetor(desordenado, qtde); QSort(ordenado,ini,qtde); mostra_vetor(ordenado,qtde); desaloca_vetor(ordenado); desaloca_vetor(desordenado); return 0; } void limpa_tela(void){ system("cls"); } int le_tam_vetor(void){ int tam; do{ limpa_tela(); printf("Informe o tamanho do vetor: "); scanf("%d%*c", &tam); if(tam <=0 ){ printf("O tamanho do vetor deve ser maior do que zero!"); getchar(); } }while(tam <=0); return tam; } long *aloca_vetor(int qtde){ long *vetor; vetor = (long *)calloc(qtde, sizeof(long)); if(!vetor){ limpa_tela(); printf("Erro na alocação de memoria."); printf("Impossivel continuar a execucao."); exit(0); } return vetor; } void desaloca_vetor(long *vetor){ free(vetor); } void preenche_vetor(long *vetor, int qtde){ int cont; long valor; srand(time(NULL)); //inicializa a geracao randomica de numeros for(cont=0; cont<qtde; cont++){ valor = rand(); //rand() gera o num. randomico vetor[cont] = valor; } } void mostra_vetor(long *vetor, int qtde){ int cont; for(cont=0; cont<qtde; cont++) printf("%d\t", vetor[cont]); getchar(); } void QSort (long *vetor, int ini, int fim){ int i=ini; int f=fim; int pivo = vetor[ini]; int esq; int aux; esq=1; if (fim > ini){ while (i < f) { if (esq==1) { if (vetor[f]<pivo){ aux=vetor[f]; vetor[f]=vetor[i]; vetor[i]=aux; // esq=100; i=i+1; } else f=f-1; } else{ if (pivo<vetor[i]){ aux=vetor[f]; vetor[f]=vetor[i]; vetor[i]=aux; esq=1; f=f-1; } else i=i+1; } } QSort (vetor, ini, i-1); QSort (vetor, i+1, fim); } }Editado por MicheusIncluída tag's CODE para melhorar a visualização. Utilize a identação também ;)
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.