Fusione

1

La lista risultante viene creata vuota e poi riempita con i valori ordinati

def fusione(lista1, lista2):
    n1 = len(lista1)
    n2 = len(lista2)    
    lista3 = []
    i = j = 0
    while(i < n1) and (j < n2):
        if lista1[i] < lista2[j]:
            lista3.append(lista1[i])
            i += 1
        else:
            lista3.append(lista2[j])
            j += 1
    while(i < n1):
        lista3.append(lista1[i])
        i += 1
    while(j < n2):
        lista3.append(lista2[j])
        j += 1
    return lista3

2

L’operazione di append potrebbe rallentare l’esecuzione del codice.
La lista risultante viene creata della lunghezza giusta e poi riempita con i valori ordinati.

def fusione(lista1, lista2):
    n1 = len(lista1)
    n2 = len(lista2)
    n3 = n1+n2
    lista3 = n3*[0]
    i = j = k = 0
    while(i < n1) and (j < n2):
        if lista1[i] < lista2[j]:
            lista3[k] = lista1[i]
            i += 1
        else:
            lista3[k] = lista2[j]
            j += 1
        k += 1
    while(i < n1):
        lista3[k] = lista1[i]
        i += 1 
        k += 1
    while(j < n2):
        lista3[k] = lista2[j]
        j += 1
        k += 1
    return lista3