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
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.