Sprawdź się
Dopisz brakujący fragment kodu w programie, który sortuje nierosnąco daną mu listę.
Swoje rozwiązanie przetestuj dla listy lista = [5, 8, 4, 7, 3, 9, 11, 16, 18, 19, 99, 20, 65]
.
Specyfikacja:
Dane:
lista
– dane do posortowania; lista zawierająca liczby całkowite
Wynik:
Na standardowym wyjściu wyświetlane są posortowane nierosnąco elementy listy
lista
.
Przykładowe rozwiązanie zadania:
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:
# ------------------------
# Brakująca część programu
# 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)
Dopisz brakujący fragment kodu w programie, który sortuje nierosnąco daną mu listę.
Swoje rozwiązanie przetestuj dla listy lista = [5, 8, 4, 7, 3, 9, 11, 16, 18, 19, 99, 20, 65]
.
Specyfikacja:
Dane:
lista
– lista zawierająca liczby całkowite
Wynik:
Na standardowym wyjściu wyświetlane są posortowane nierosnąco elementy listy
lista
.
Przykładowe rozwiązanie zadania:
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
# ----------------------
# Brakująca część programu
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)
Napisz program, który, używając sortowania przez scalanie, posortuje niemalejąco zbiór lista
.
Swoje rozwiązanie przetestuj dla listy lista = [5, 8, 4, 7, 3, 9, 11, 16, 18, 19, 99, 20, 65]
.
Specyfikacja:
Dane:
lista
– lista zawierająca liczby całkowite
Wynik:
Na standardowym wyjściu wyświetlane są posortowane niemalejąco elementy listy
lista
.
Przykładowe rozwiązanie zadania:
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)
Napisz program, w którym scalisz dwie posortowane tablice w jedną (również posortowaną). Wypisz utworzoną tablicę, oddzielając jej elementy znakiem spacji.
Swój program przetestuj dla następujących tablic:
tablica1 = [ 4, 65, 432, 543, 654, 7654 ]
tablica2 = [ 2, 23, 45, 65, 75, 432, 9211 ]
Specyfikacja:
Dane:
n
– liczba naturalnam
– liczba naturalnatablica1
–n
-elementowa posortowana niemalejąco tablica liczb naturalnychtablica2
–m
-elementowa posortowana niemalejąco tablica liczb naturalnych
Wynik:
Na standardowym wyjściu wyświetlane są wszystkie elementy posortowanej niemalejąco tablicy, będącej wynikiem scalenia tablic wejściowych. Elementy są oddzielone pojedynczym znakiem spacji.
tablica1 = [4, 65, 432, 543, 654, 7654]
tablica2 = [2, 23, 45, 65, 75, 432, 9211]
def scalTablice(tablica1, tablica1Dlugosc, tablica2, tablica2Dlugosc, tablicaDocelowa):
biezacyIndeksWTablicy1 = 0
biezacyIndeksWTablicy2 = 0
biezacyIndeksWTablicyDocelowej = 0
while biezacyIndeksWTablicy1 < tablica1Dlugosc and biezacyIndeksWTablicy2 < tablica2Dlugosc:
if tablica1[biezacyIndeksWTablicy1] <= tablica2[biezacyIndeksWTablicy2]:
tablicaDocelowa[biezacyIndeksWTablicyDocelowej] = tablica1[biezacyIndeksWTablicy1]
biezacyIndeksWTablicy1 += 1
else:
tablicaDocelowa[biezacyIndeksWTablicyDocelowej] = tablica2[biezacyIndeksWTablicy2]
biezacyIndeksWTablicy2 += 1
biezacyIndeksWTablicyDocelowej += 1
while biezacyIndeksWTablicy1 < tablica1Dlugosc:
tablicaDocelowa[biezacyIndeksWTablicyDocelowej] = tablica1[biezacyIndeksWTablicy1]
biezacyIndeksWTablicy1 += 1
biezacyIndeksWTablicyDocelowej += 1
while biezacyIndeksWTablicy2 < tablica2Dlugosc:
tablicaDocelowa[biezacyIndeksWTablicyDocelowej] = tablica2[biezacyIndeksWTablicy2]
biezacyIndeksWTablicy2 += 1
biezacyIndeksWTablicyDocelowej += 1
tablicaDocelowa = [0] * 13
scalTablice(tablica1, len(tablica1), tablica2, len(tablica2), tablicaDocelowa)
for i in range(13):
print(tablicaDocelowa[i], end=" ")