Ordinamento MergeSort tramite puntatori [NON RISOLTO]

di il
3 risposte

Ordinamento MergeSort tramite puntatori [NON RISOLTO]

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

3 Risposte

Devi accedere o registrarti per scrivere nel forum
3 risposte