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...