ÎncepețiÎncepe gratuit

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

Vezi cursul

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)
Editează și rulează codul