Corectarea unui bug în algoritmul de sortare prin interclasare
Ți s-a dat un program care sortează o listă de numere folosind algoritmul de sortare prin interclasare (merge sort). În timp ce testezi funcția merge_sort(), observi că ceva nu funcționează corect. Poți corecta algoritmul astfel încât să producă rezultatele așteptate?
Acest exercițiu face parte din cursul
Structuri de date și algoritmi în Python
Instrucțiuni pentru exercițiu
- Corectează greșeala din atribuirea jumătății stângi.
- Corectează greșeala din atribuirea jumătății drepte.
- Corectează greșeala din actualizarea pointerului pentru jumătatea stângă.
- Corectează greșeala din actualizarea pointerului pentru jumătatea dreaptă.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
def merge_sort(my_list):
if len(my_list) > 1:
mid = len(my_list)//2
left_half = my_list[:mid]
right_half = my_list[mid:]
merge_sort(left_half)
merge_sort(right_half)
i = j = k = 0
while i < len(left_half) and j < len(right_half):
if left_half[i] < right_half[j]:
# Correct mistake when assigning left half
my_list[k] = right_half[i]
i += 1
else:
# Correct mistake when assigning right half
my_list[k] = left_half[j]
j += 1
k += 1
while i < len(left_half):
my_list[k] = left_half[i]
# Correct mistake when updating pointer for left half
j += 1
k += 1
while j < len(right_half):
my_list[k] = right_half[j]
# Correct mistake when updating pointer for right half
i += 1
k += 1
my_list = [35,22,90,4,50,20,30,40,1]
merge_sort(my_list)
print(my_list)