Dubbio merge array

jJjjJ1
Il mio libro mi dà questo pseudocodice per l'unione di due sottosequenze ordinate di un array, indicando con A l'array e con A[x;y] una sottosequenza A[x], . . . , A[y] dell'array. Supponiamo di avere due sottosequenze A[i_1, f_1] A[f_1 + 1; f_2] ordinate e vogliamo unire le due sequenze ordinandole:

algoritmo merge( array A, interi i_1, f_1 e f_2 )
       sia X un array di lunghezza f_2 - i_1 + 1
       i <- 1
       i_2 <- f_1 + 1
       while( i_1 <= f_1 and i_2 <= f_2 ) do
              if( A[ i_1 ] <= A[ i_2 ] ) then
                     X[ i ] = A[ i_1 ]
                     incrementa i ed i_1
              else
                     X[ i ] = A[ i_2 ]
                     incrementa i ed i_2
        if( i_1 < f_1 ) then copia A[ i_1; f_1] alla fine di X
        else copia A[ i_2; f_2 ] alla fine di X


Il mio dubbio è nell'if nella penultima riga, non ci dovrebbe essere un minore o uguale? Infatti se considero l'array A=[ 7 15 10 11 ] allora ottengo, con i_1 = 1, f_1 = 2 e f_2 = 4:

PASSO 1: X = [ 7 ] i_1 = 2 i_2 = 3
PASSO 2: X = [ 7 10 ] i_1 = 2 i_2 = 4
PASSO 3: X = [ 7 10 11 ] i_1 = 2 i_2 = 5
Esce dal ciclo, e per l'if finale dovrebbe copiare A[ 5, 4 ] alla fine di X, che è assurdo, invece va bene se c'è un minore o uguale...

Risposte
Cronovirus
Scusami: sapresti dirmi più precisamente cos'è X? E' un vettore di supporto o è definito?

jJjjJ1
Ausiliario

Cronovirus
Per l'algoritmo che hai scritto si: così non funziona! Se ci metti il minore o uguale dovrebbe andare

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.