Buongiorno,
sono giorni che combatto con il seguente codice.
E' un merge col quale voglio ordinare spostando i puntatori.
#include <iostream>
#include <limits>
using namespace std;
void
stampa (int *n)
{
int i;
for (i = 0; i < 10; i++)
{
cout << n[i] << " ";
}
cout << endl;
return;
}
void
stampa2 (int** n)
{
int i;
for (i = 0; i < 10; i++)
{
cout << *n[i] << " ";
}
cout << endl;
return;
}
void
merge (int** a, int p, int q, int r)
{
int n1, n2;
n1 = q - p + 1;
n2 = r - q;
int* L[n1];
int* R[n2];
for (int i = 0; i < n1; i++)
L[i] = a[p + i];
*L[n1] = numeric_limits < int >::max ();
for (int j = 0; j < n2; j++)
R[j] = a[q + j + 1];
*R[n2] = *L[n1];
int i = 0;
int j = 0;
for (int k=p; k<=r; k++)
{
if (*L[i] <= *R[j])
a[k] = L[i++];
else
a[k] = R[j++];
}
}
void
ordina_mergesort (int** a, int p, int r)
{
int q=0;
if (p < r)
{
q = (p + r) / 2;
ordina_mergesort (a, p, q);
ordina_mergesort (a, q+1, r);
merge (a, p, q, r);
}
}
int
main ()
{
int scombinati[] = { 9, 1, 8, 2, 0, 3, 7, 4, 6, 5 };
int **ordinati;
ordinati = new int *[10];
for(int i=0; i<10; i++)
ordinati[i] = scombinati+i;
ordina_mergesort(ordinati, 0, 9);
cout << "Stampo i numeri scombinati: (9, 1, 8, 2, 0, 3, 7, 4, 6, 5)" << endl;
stampa (scombinati);
cout << "\nStampo i numeri ordinati: (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)" << endl;
stampa2 (ordinati);
delete [] ordinati;
return 0;
}
Spero ci sia qualcuno qui in grado di correggerlo.
Credo di uscire fuori dai vettori ma non so che fare