Ver Mensaje Individual
  #3 (permalink)  
Antiguo 03/05/2010, 16:29
Avatar de extremoo
extremoo
 
Fecha de Ingreso: abril-2009
Mensajes: 54
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: mergesort errores

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>

int merge(int a[], int low, int high, int mid)
{
int i, j, k, c[50];
i=low;
j=mid+1;
k=low;
while((i<=mid)&&(j<=high))
{
if(a[i]<a[j])
{
c[k]=a[i];
k++;
i++;
}
else
{
c[k]=a[j];
k++;
j++;
}
}

while(i<=mid)
{
c[k]=a[i];
k++;
i++;
}

while(j<=high)
{
c[k]=a[j];
k++;
j++;
}

for(i=low;i<k;i++)
{
a[i]=c[i];
}
}

int *mergesort(int a[], int low, int high)
{
int mid;

if(low<high)
{
mid=(low+high)/2;
mergesort(a,low,mid);
mergesort(a,mid+1,high);
merge(a,low,high,mid);
}
if(high==low)
{
return a;
}
return(0);
}


int main ()
{
float total,inicio, final;
inicio=clock();

FILE *ofp, *ifp;

ifp = fopen("aleatorio.txt","r");
int N, i;

fscanf(ifp,"%i", &N);
int d[N];
int *j;
for(i=0;i<N;i++)
{
fscanf(ifp,"%i", &d[i]);
}

ofp = fopen("merge_dec.txt","w");
int * temp = (int *)malloc(sizeof(int)*(N));
j = mergesort(d, 0, N);
for(i=0;i<N;i++)
{
fprintf(ofp,"%i\n",d[i]);
}


fclose(ofp);
fclose(ifp);

final=clock();
total=(final-inicio)/(double) CLOCKS_PER_SEC;
printf("%f\n",total);

return 0;
}



ARREGLE UN POCO MAS EL CODIGO COMPILA, PERO ME ARROJA
Fallo de segmentación (`core' generado) :(

tal vez sea un error en los punteros :/ ya me tiene sin neuronas el codigo. una ayudita porfa .