Benti
18-02-2010, 17:02
Ciao sto realizzando un merge sort posto il codice:
void merge(int a[], int left, int center, int right, int indici[]) {
int i, j, k;
int b[MAX];
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];
}
void mergesort(int a[], int left, int right, int indici[]) {
int center;
if(left<right) {
center = (left+right)/2;
mergesort(a, left, center,indici);
mergesort(a, center+1, right, indici);
merge(a, left, center, right, indici);
}
}
}
Quello che non riesco a capire come posso memerizzare in un array (indici) la sequenza delle modifiche all'array
in modo tale che se stampo a[indici[i]] mi riporta l'array originale
Es 1 - 2 - 3
Dopo il merge
3 - 2 - 1
indice[2 1 0]
con a[indici[i]] ritorna 1 - 2 - 3
Grazie
void merge(int a[], int left, int center, int right, int indici[]) {
int i, j, k;
int b[MAX];
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];
}
void mergesort(int a[], int left, int right, int indici[]) {
int center;
if(left<right) {
center = (left+right)/2;
mergesort(a, left, center,indici);
mergesort(a, center+1, right, indici);
merge(a, left, center, right, indici);
}
}
}
Quello che non riesco a capire come posso memerizzare in un array (indici) la sequenza delle modifiche all'array
in modo tale che se stampo a[indici[i]] mi riporta l'array originale
Es 1 - 2 - 3
Dopo il merge
3 - 2 - 1
indice[2 1 0]
con a[indici[i]] ritorna 1 - 2 - 3
Grazie