Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [c] Funzione mergesort

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    27

    [c] Funzione mergesort

    Sto cercando di ordinare un vettore di double con il metodo merge sort ma non riesco...io utilizzo questo codice
    codice:
    void Merge(double A[], int p, int q, int r) 
    {
      int i, j, k;
      double *B;
    
      i = p;
      j = q+1;
      k = 0;
      B=(double*)malloc (sizeof(double));
      while (i<=q && j<=r) {
        if (A[i]<A[j]) {
          B[k] = A[i];
          i++;
        } else {
          B[k] = A[j];
          j++;
        }
        k++;
      }
      while (i<=q) {
        B[k] = A[i];
        i++;
        k++;
      }
      while (j<=r) {
        B[k] = A[j];
        j++;
        k++;
      }
      for (k=p; k<=r; k++)
        A[k] = B[k-p];
      return;
    }
    
    void MergeSort(double A[], int p, int r)
     {
      int q;
    
      if (p<r) {
        q = (p+r)/2;
        MergeSort(A, p, q);
        MergeSort(A, q+1, r);
        Merge(A, p, q, r);
      }
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    E' sbagliata la chiamata a malloc() nella funzione Merge(): così come l'hai scritta, allochi spazio per un solo elemento di tipo double, ma a te ne servono r - p + 1, quindi basta scrivere:

    B = (double*) malloc ( ( r - p + 1 ) * sizeof(double) );

    e dovrebbe andare. Tra l'altro ti consiglio pure di chiamare free() alla fine di Merge() prima di return

    free(B);

    in maniera tale da evitare memory leaks
    every day above ground is a good one

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.