Aan de slagGa gratis aan de slag

Een bug in het merge sort-algoritme corrigeren

Je hebt een programma gekregen dat een lijst met getallen sorteert met het merge sort-algoritme. Tijdens het testen van de functie merge_sort() merk je dat de code niet klopt. Kun je het algoritme corrigeren zodat het correct werkt?

Deze oefening maakt deel uit van de cursus

Datastructuren en algoritmen in Python

Cursus bekijken

Oefeninstructies

  • Corrigeer de fout bij het toewijzen van de linkerhelft.
  • Corrigeer de fout bij het toewijzen van de rechterhelft.
  • Corrigeer de fout bij het bijwerken van de pointer voor de linkerhelft.
  • Corrigeer de fout bij het bijwerken van de pointer voor de rechterhelft.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

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)
Code bewerken en uitvoeren