Ir ao conteúdo
  • Cadastre-se

Sub-Dividindo o Vetor


metal57

Posts recomendados

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);

}

}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...