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

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 .


Código C:
Ver original
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4. #include<string.h>
  5.  
  6. int merge(int a[], int low, int high, int mid)
  7. {
  8.   int i, j, k, c[50];
  9.   i=low;
  10.   j=mid+1;
  11.   k=low;
  12.   while((i<=mid)&&(j<=high))
  13.   {
  14.     if(a[i]<a[j])
  15.       {
  16.       c[k]=a[i];
  17.       k++;
  18.       i++;
  19.       }
  20.       else
  21.       {
  22.       c[k]=a[j];
  23.       k++;
  24.       j++;
  25.       }
  26.   }
  27.  
  28.   while(i<=mid)
  29.   {
  30.     c[k]=a[i];
  31.     k++;
  32.     i++;
  33.   }
  34.  
  35.   while(j<=high)
  36.   {
  37.     c[k]=a[j];
  38.     k++;
  39.     j++;
  40.   }
  41.  
  42.   for(i=low;i<k;i++)
  43.   {
  44.     a[i]=c[i];
  45.   }
  46. }
  47.  
  48. int *mergesort(int a[], int low, int high)
  49. {
  50.   int mid;
  51.  
  52.   if(low<high)
  53.     {
  54.       mid=(low+high)/2;
  55.       mergesort(a,low,mid);
  56.       mergesort(a,mid+1,high);
  57.       merge(a,low,high,mid);
  58.     }
  59.     if(high==low)
  60.       {
  61.       return a;
  62.       }
  63.   return(0);
  64. }
  65.  
  66.  
  67. int main ()
  68. {
  69.   float total,inicio, final;
  70.   inicio=clock();
  71.  
  72.   FILE *ofp, *ifp;
  73.  
  74.   ifp = fopen("aleatorio.txt","r");
  75.   int N, i;
  76.  
  77.   fscanf(ifp,"%i", &N); /*guardo tamaño del arreglo total que viene del archivo abierto*/
  78.   int d[N];
  79.   int *j;
  80.     for(i=0;i<N;i++)
  81.     {
  82.       fscanf(ifp,"%i", &d[i]); /*arreglo de numeros aleatorios*/
  83.     }
  84.      
  85.   ofp = fopen("merge_dec.txt","w");
  86.   int * temp = (int *)malloc(sizeof(int)*(N));
  87.   j = mergesort(d, 0, N);
  88.   for(i=0;i<N;i++)
  89.     {
  90.     fprintf(ofp,"%i\n",d[i]);
  91.     }
  92.  
  93.  
  94. fclose(ofp);
  95. fclose(ifp);
  96.  
  97. final=clock();
  98. total=(final-inicio)/(double) CLOCKS_PER_SEC;
  99. printf("%f\n",total);
  100.  
  101. return 0;
  102. }