Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C] - Mergesort: perchè non va come dovrebbe?

    Salve colleghi!

    Stavo implementando l'algoritmo di Mergesort in C, ma purtroppo non ordina gli elementi come dovrebbe, perchè per esempio se inserisco in input da tastiera tipo 10 interi (1,2,3,4,5,9,8,10,7,6), la sequenza verrebbe sballata anzichè ordinata... Secondo me è la funzione Merge che non va, ma non riesco a capire dove sia l'errore, perchè da un punto di vista logico, il ragionamento mi pare giusto...

    Ecco il mio codice in C:

    codice:
    // LIBRERIE
    #include <stdio.h>
    #include <stdlib.h>
    
    // DICHIARAZIONE DELLE FUNZIONI
    void Merge_Sort (int [], int, int);
    void Merge (int [], int, int, int);
    
    // MAIN PRINCIPALE
       int main ()
       
    {
           
           system ("COLOR 1E");
           
           int A[100];
           int Length, i;
           
           printf (" --------------- MERGESORT --------------- \n\n");
           
           printf ("Dimmi quanti interi vuoi inserire= ");
           scanf ("%d", &Length);
            
           printf ("\n\n");
            
           printf ("Inserisci %d interi...\n\n", Length);
           for (i=1; i<=Length; ++i) {
               printf ("Intero [%d]= ", i);
               scanf ("%d", &A[i]);
               }
           
           Merge_Sort(A,1,Length);
           
           printf ("\nArray ordinato... \n\n");
           for (i=1; i<=Length; ++i)
             printf ("%d ", A[i]);
              
           printf ("\n\n");
           
           system ("PAUSE");
           
    }
    
    // FUNZIONE MERGESORT
       void Merge_Sort (int A[100], int left, int right)
       
    {
            
            int center;
            
            if (left<right) {
               center=(left+right)/2;
               Merge_Sort(A,left,center);
               Merge_Sort(A,center+1,right);
               Merge(A,left,center,right);
               }
               
    }
    
    // FUNZIONE MERGE
       void Merge (int A[100], int left, int center, int right)
       
    {
               
            int n1, n2, i, j, k;
            
            
            n1=(center-left)+1;
            n2=right-center;
            
            int L[n1+1];
            int R[n2+1];
    
            
            for (i=1; i<=n1; i++)
               L[i]=A[left+i-1];
               
            for (j=1; j<=n2; j++)
               R[j]=A[center+j];
               
            i=1;
            j=1;
            
            for (k=left; k<=right; k++)
               if (L[i]<=R[j]) {
                  A[k]=L[i];
                  i++;
                  }
               else {
                  A[k]=R[j];
                  j++;
                  }
    
    }
    Attendo qualche anima pia che mi dia qualche dritta... Grazie anticipatamente...

  2. #2
    Nessuno mi può aiutare a capire dove sta l'errore? Sto impazzendo!!!

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.