Mi sapreste spiegare in modo semplice e passo passo cosa fa il programma "merge-sort"?
Sarà più specifico...a lezione mi hanno spiegato l'algoritmo e fin li tutto ok poi però quando sono andato a fare il programma ho avuto enormi problemi ma con l'aiuto di internet sono riuscito a crearlo...solo che ho un dubbio riguardo la ricorsione di merge-sort.
questo è il codice del programma per intero:
#include <stdio.h>
void mergesort(int a[], int left, int right);
void merge(int a[], int left, int center, int right);
void main() {
int n;
int v[n];
printf ("inserisci posti array = ");
scanf ("%d",&n);
int i;
for (i=1; i<n+1; i++) {
printf ("inserisci valore nel posto %d = ",i);
scanf ("%d",&v[i]);
}
mergesort(v, 1, n);
for (i=1; i<n+1; i++) {
printf ("l'array ordinato al posto %d = %d\n",i,v[i]);
}
system ("pause");
}
void mergesort(int a[], int left, int right){ //da qui in poi ho problemi int center;
if (left<right){
center = (left+right)/2;
mergesort(a, left, center);
mergesort(a, center+1, right);
merge(a, left, center, right);
}
}
void merge(int a[], int left, int center, int right) {
int i, j, k;
int b[999];
i = left;
j = center+1;
k = 0;
while ((i<=center) && (j<=right)){
if (a[i] <= a[j]) {
b[k] = a[i]; i++;
} else {
b[k] = a[j]; j++;}
k++;
}
while (i<=center) {
b[k] = a[i];
i++;
k++;
}
while (j<=right) {
b[k] = a[j];
j++;
k++;
}
for (k=left; k<=right; k++)
a[k] = b[k-left];
}
non capisco che valore viene attribuito a "left" e "right" se io non le l'ho dati in input, e cosa fa di preciso "void merge".
il codice funziona l'ho già compilato, ma dopo aver letto il libro, visto video e svariate discussioni ancora oggi ho questi dubbi.
So che per voi è una cosa semplice e banale (oltre che basilare), ma io sono proprio alle primissime armi e spero voi mi possiate togliere questi infernali dubbi
Attendo vostre notizie e grazie in anticipo.