def scal_dwie_czesci(lista, indeks_poczatku, srodkowy_indeks, indeks_konca): rozmiar_lewej_czesci = srodkowy_indeks - indeks_poczatku + 1 rozmiar_prawej_czesci = indeks_konca - srodkowy_indeks kopia_lewej_czesci = lista[indeks_poczatku:indeks_poczatku + rozmiar_lewej_czesci] kopia_prawej_czesci = lista[srodkowy_indeks + 1:srodkowy_indeks + rozmiar_prawej_czesci + 1] biezacy_indeks_lewej_czesci = 0 biezacy_indeks_prawej_czesci = 0 biezacy_indeks_oryginalnej_listy = indeks_poczatku while biezacy_indeks_lewej_czesci < rozmiar_lewej_czesci and biezacy_indeks_prawej_czesci < rozmiar_prawej_czesci: if kopia_lewej_czesci[biezacy_indeks_lewej_czesci] <= kopia_prawej_czesci[biezacy_indeks_prawej_czesci]: lista[biezacy_indeks_oryginalnej_listy] = kopia_lewej_czesci[biezacy_indeks_lewej_czesci] biezacy_indeks_lewej_czesci += 1 else: lista[biezacy_indeks_oryginalnej_listy] = kopia_prawej_czesci[biezacy_indeks_prawej_czesci] biezacy_indeks_prawej_czesci += 1 biezacy_indeks_oryginalnej_listy += 1 while biezacy_indeks_lewej_czesci < rozmiar_lewej_czesci: lista[biezacy_indeks_oryginalnej_listy] = kopia_lewej_czesci[biezacy_indeks_lewej_czesci] biezacy_indeks_lewej_czesci += 1 biezacy_indeks_oryginalnej_listy += 1 while biezacy_indeks_prawej_czesci < rozmiar_prawej_czesci: lista[biezacy_indeks_oryginalnej_listy] = kopia_prawej_czesci[biezacy_indeks_prawej_czesci] biezacy_indeks_prawej_czesci += 1 biezacy_indeks_oryginalnej_listy += 1 def sortuj_przez_scalanie(lista, indeks_poczatku, indeks_konca): if indeks_poczatku < indeks_konca: # Krok 1 - podziel liste na dwie czesci srodkowy_indeks = (indeks_konca + indeks_poczatku) // 2 # Krok 2 - podziel lewą część dalej sortuj_przez_scalanie(lista, indeks_poczatku, srodkowy_indeks) # Krok 3 - podziel prawą część dalej sortuj_przez_scalanie(lista, srodkowy_indeks + 1, indeks_konca) # Krok 4 - scal dwie czesci scal_dwie_czesci(lista, indeks_poczatku, srodkowy_indeks, indeks_konca) else: return lista = [5, 8, 4, 7, 3, 9, 11, 16, 18, 19, 99, 20, 65] sortuj_przez_scalanie(lista, 0, len(lista) - 1) print(lista)