Ir ao conteúdo
  • Cadastre-se
metal57

Sub-Dividindo o Vetor

Recommended Posts

Boa tarde Senhores

Estou tentando fazer uma versão do merge sort que ao invés de sub-dividir o vetor em dois acaba por subdividi-lo em três só que ele esta tendo alguns problemas ,creio eu na intercala como não consigo ver mais o erro poderiam me ajudar por gentileza a tentar detectá-lo ,desde já agradeço a atenção de todos,segue abaixo o código do mesmo:

/******************Bibliotecas**************************/

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <locale.h>

#define MAX 500000

/*Auxilia no processo de ordenação

*do MergeSort

*/

void Intercala(int v[],int inicio,int meio1,int meio2,int fim);

/*Ordena os dados crescentemente

*Possui no pior caso complexidade O(nlogn)

*/

void Merge_Sort(int v[],int inicio,int fim);

void numero_aleatorio(int vet[],int *n,int max,time_t t);

/*Função para a impressão do vetor*/

void imprimir_vetor(int vet[],int n);

//////////////////////////////////////////////////////////////////////////////////

int main()

{

setlocale(LC_ALL,"Portuguese");

time_t t;

time_t t1,t2;

t=time(NULL);

int vet[MAX];

int max=0;

int tGasto=0;

int tam=0,merge=0;

max=MAX;

printf("***********************Ordenando o Vetor***************************\n");

numero_aleatorio(vet,&tam,max,t);

imprimir_vetor(vet,tam);

t1=time(NULL);

Merge_Sort(vet,1,tam);

t2=time(NULL);

tGasto=t2-t1;

printf("O Tempo Gasto pelo MergeSort foi :%d segundos \n\n",tGasto);

merge=tGasto;

printf("MergeSort:%d segundos\n",merge);

imprimir_vetor(vet,tam);

system("PAUSE");

return (0);

}

void Intercala(int v[],int inicio,int meio1,int meio2,int fim)

{

int i=0,j=0,k=0,l=0,*w;

w=(int*)malloc((fim-inicio)*sizeof(int));

i=inicio;

j=meio1;

l=meio2;

k=0;

while(i<meio1&&j<meio2)

{

if(v<=v[j])

w[k++]=v[i++];

else

w[k++]=v[j++];

}

while(j<meio1&&l<fim)

{

if(v[j]<=v[l])

w[k++]=v[j++];

else

w[k++]=v[l++];

}

while(i<meio1)

w[k++]=v[i++];

while(j<meio2)

w[k++]=v[j++];

while(l<fim)

w[k++]=v[l++];

for(i=inicio;i<fim;i++)

v=w[i-inicio];

free(w);

}

void Merge_Sort(int v[],int inicio,int fim)

{

int meio1,meio2;

if(inicio<fim-1)

{

meio1=(inicio+fim)/3;

meio2=meio1*2;

Merge_Sort(v,inicio,meio1);

Merge_Sort(v,meio1,meio2);

Merge_Sort(v,meio2,fim);

Intercala(v,inicio,meio1,meio2,fim);

}

}

void numero_aleatorio(int vet[],int *n,int max,time_t t)

{

int i=0,j=0,l=0;

srand(t);

printf("Digite o tamanho do vetor:");

scanf("%d",n);

for(j=1;;j++)

{

if(*n>max)

{

printf("Digite o tamanho do vetor:");

scanf("%d",&n);

}

else

{

break;

}

}

l=*n;

printf("::Elementos do Vetor Gerados Randomicamente::\n");

for(i=0;i<l;i++)

{

vet=rand ();

}

}

void imprimir_vetor(int vet[],int n)

{

int i=1;

for(i=0;i<n;i++)

{

printf("O valor do vetor[%d]:%d\n",i,vet);

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×