Sto cercando di implementare un algoritmo di ordinamento merge ricorsivo con funzioni solo che non restituiscono nulla, ma ho difficoltà a farlo funzionare. Sembra come se stesse abbattendo gli elenchi e li ordinasse correttamente, ma non sta trasferendo quelle liste ordinate nella prossima chiamata ricorsiva.Tipo di merge ricorsivo Python ordinamento non funzionante
def merge(list1, list2):
result = []
i = 0
j = 0
k = 0
while i < len(list1) and j < len(list2):
if list1[i] < list2[j]:
result.append(list1[i])
i+=1
else:
result.append(list2[j])
j+=1
k+=1
while i < len(list1):
result.append(list1[i])
i+=1
k+=1
while j < len(list2):
result.append(list2[j])
j+=1
k+=1
print(result)
def merge_sort(inplist):
if int(len(inplist)) >1:
mid = len(inplist)//2
left = inplist[0:mid]
right = inplist[mid:]
merge_sort(left)
merge_sort(right)
merge(left,right)
test = [1,4,7,2,6,9,8,5,3,0]
merge_sort(test)
print(test)
merge_sort è una funzione ricorsiva, vorrei che correttamente riportare i valori di livello 2 o 3 di ricorsione? –
@AnandSKumar Suppongo che dipenda un po 'da come lo si imposta, ma penso che dovrebbe funzionare, sì. Principalmente perché assegni di nuovo il risultato finale all'elenco originale; qualsiasi elenco intermedio può essere copie o riferimenti a (parti di) l'elenco originale, ma non importa più a quel punto. Certo, importa nel senso dell'uso della memoria; in tal caso avresti sempre bisogno di passare la lista completa, più gli indici di inizio e fine rilevanti (proprio come si farebbe in C). – Evert