MergeSort

di il
5 risposte

MergeSort

Buonasera a tutti,
potete darmi una mano a completare le condizioni degli ultimi due cicli for del codice per effettuare il merge? Non so completare le condizioni
D.i seguito il link per l'immagine:

http://i67.tinypic.com/1zbdxlh.pn

Grazie in anticipo

5 Risposte

  • Re: MergeSort

    Non sarebbe meglio se traducessi il tutto in codice C/C++ e ci dicessi precisamente cosa non hai capito?!
  • Re: MergeSort

    L'ho tradotto già il resto del codice, non l'ho messo qui perchè mi sembrava banale!

    Sul primo for dovrebbe riscrivere il vettore al contrario ed il secondo scrivere il vettore ausiliario in quello originale. L'unica cosa che non ho capito è come impostare le condizioni o per lo meno non so se sono correte:

    Per il primo: for(h=mezzo;h<i;h--) //h-- perchè devo procedere al contrario

    Per il secondo: for(j=primo;j<k-1;j++)
  • Re: MergeSort

    Io invece non capisco da dove salta fuori quel B[], visto che tra i parametri c'è solo A[] e nelle variabili locali non ce n'è traccia...

    P.S. h>i ?
  • Re: MergeSort

    L'esempio è preso da questo video credo: https://www.youtube.com/watch?v=ijdUgyGQOug&t=1010
    Assume l'esistenza di questo vettore ausiliario di cui necessita il mergsort per poter effettuare l'ordinamento.

    Questo è il codice tradotto:
    
    void merge(int v[], int sx, int cx, int dx)
    {
    	int i,j,k,h,aux;
    	i=sx;
    	j=cx+1;
    	k=sx;
    	while(i<=cx && j<=dx) //Ovvero finchè in entrambi i vettori sono presenti degli elementi
    	{
    		if(v[i]<=v[j])
    		{
    			aux[k]=v[i];
    			i++;
    		}
    		else
    		{
    			aux[k]=v[j];
    			j++;
    		}
    		j=dx;
    		for(h=cx;h<sx;h--) //Si attiva se e solo se uno dei due vettori è vuoto e nell'altro sono presenti ancora elementi
    		{
    			v[j];=v[h];
    			j--;
    		}
    		for(j=sx;j<k-1;j++)
    		{
    			v[j]=aux[j];
    		}
    	}
    }
    
  • Re: MergeSort

    Però, nello spezzone di codice che indichi, aux è un int e viene usato come un array di int... Non mi torna...
Devi accedere o registrarti per scrivere nel forum
5 risposte