Sortiranje u Pythonu
(Ostvarivanje ishoda u domeni Računalno razmišljanje i programiranje - 8. raz. OŠ)
Ivana Vezjak
OŠ August Šenoa, Osijek
Obrazovni ishodi u domeni Računalno razmišljanje i programiranje (8.raz.)
- B.8.1 učenik identificira neki problem, stvara program za njegovo rješavanje, dokumentira rad programa i predstavlja djelovanje programa drugima.
- B.8.2 učenik prepoznaje i opisuje algoritam sortiranja, primjenjuje jedan algoritam sortiranja za rješavanje zadanog problema u programskom jeziku.
- B.8.3 učenik prepoznaje i opisuje mogućnost primjene rekurzivnih postupaka pri rješavanju odabranih problema te istražuje daljnje mogućnosti primjene rekurzije.
- B.8.4 učenik prepoznaje i proučava interdisciplinarnu primjenu računalnoga razmišljanja analiziranjem i rješavanjem odabranih problema iz različitih područja učenja.
Algoritmi sortiranja
Bubble sort (Mjehuričasto sortiranje)
brojevi = [5, 8, 9, 2, 1, 4]
for i in range(len(brojevi)-1):
for j in range((len(brojevi)-1)-i): # provjeravamo svaki element niza
if brojevi[j] > brojevi[j+1]:
brojevi[j], brojevi[j+1] = brojevi[j+1], brojevi[j] # napravi zamjenu
print(brojevi)
Selection sort (Sortiranje izborom)
brojevi = [5, 8, 4, 12, 9, 1]
for i in range(len(brojevi)-1,0,-1):
naj = 0
for j in range(1, i+1):
# usporedi trenutnu najvecu vrijednost i sljedeci element niza
if brojevi[j] > brojevi[naj]:
naj = j
#zamjena
brojevi[i], brojevi[naj] = brojevi[naj], brojevi[i]
print(brojevi)
Preporuka za ostvarenje OO ishoda
(kurikulum nastavnog predmeta INF)
- Preporuča se uporaba gotove funkcije soritranja u zadanom programskom jeziku ili primijeniti gotov (pokazni primjer) algoritam sortiranja.
- Koristiti se različitim zadacima u kojima se traži slaganje/organiziranje objekata prema nekom kriteriju, npr. od najmanjeg do najvećeg i obrnuto...
Sortiranje u Pythonu
| metoda sort | funkcija sorted() |
|---|---|
| mijenja postojeću listu, vraća vrijednost None | vraća novu sortiranu listu, originalnu ne dira |
| brža pošto ne stvara kopiju | sporija |
| sortira samo listu | sortira i druge tipove podataka |
Metoda sort()
- sintaksa: naziv.sort(ključ, obrnuti redosljed)
brojevi = [4, 5, 6, 2, 1]
brojevi.sort()
print(brojevi) # Izlaz: [1, 2, 4, 5, 6]
brojevi2 = [5, 6, 7, 8, 1, 2]
brojevi2.sort(reverse = True)
print(brojevi2) # Izlaz: [8, 7, 6, 5, 2, 1]
imena = ["Josip Peric", "Tina Anic", "Marko Buric", "Ivan Horvat"]
imena.sort()
print(imena) # Izlaz: ['Ivan Horvat', 'Josip Peric', 'Marko Buric', 'Tina Anic']
imena2 = ["Josip Peric", "Tina Anic", "Marko Buric", "Ivan Horvat"]
imena2.sort(key=lambda s: s.split()[1])
print(imena2)# Izlaz: ['Tina Anic', 'Marko Buric', 'Ivan Horvat', 'Josip Peric']
Funkcija sorted()
- sintaksa: sorted(naziv, ključ, obrnuti redosljed)
brojevi = [5, 6, 2, 1, 8, 6]
a = sorted(brojevi)
print(a) # Izlaz: [1, 2, 5, 6, 6, 8]
a = sorted(brojevi, reverse = True)
print(a) # Izlaz: [8, 6, 6, 5, 2, 1]
voce = ['mango', 'kivi', 'lubenica', 'banana', 'jagoda']
print(sorted(voce)) # Izlaz: ['ananas', 'banana', 'jabuka', 'jagoda', 'kruska']
print(sorted(voce, key = len)) # Izlaz: ['jabuka', 'kruska', 'ananas', 'banana', 'jagoda']
x = "python"
print(sorted(x)) # Izlaz: ['h', 'n', 'o', 'p', 't', 'y']Funkcija lambda
- funkcija bez imena, tzv. anonimna funkcija, kratka i u jednom retku
#funkcija zbroj
def zbroj(a,b):
return a + b
#lambda funkcija
zbroj = lambda a,b : a + b
ZADACI ZA VJEŽBU:
Pomozi Djedu Mrazu da spasi Božić! *
* tema Božića se može mijenjati po potrebi


Djed Mraz je imao napornu godinu.
Tijekom cijele godine gledao je djecu
po svijetu te bilježio u svoju bilježnicu
tko je bio dobar, a tko ne.
Ispred svakog djeteta koje je zaslužilo dar stavio je +, a onima
manje dobrima stavio je znak -.
S obzirom da sada u svojoj bilježnici ima puno imena sa znakovima + i -, potrebna mu je tvoja pomoć da ih sortira.
1. zadatak
Napiši program koji prima n imena, a ispred svakog imena je znak + ili -.
Ovisno o znaku + ili - spremi ime u listu jako-dobri ili u listu manje-dobri.
Rješenje:
jako_dobri = []
manje_dobri = []
n = int(input("Broj imena"))
for i in range(n):
ime = input("Upiši znak i ime:")
ime2 = ime.split(" ")
if ime2[0] == "+":
jako_dobri.append(ime2[1])
else:
manje_dobri.append(ime2[1])
print(jako_dobri)
print(manje_dobri)
Rudolf se našao u nezgodnoj situaciji. Jutros mu je Djed Mraz dao veeeeliki popis djece i zamolio ga da označi samo one koji su bili dobri i koji će dobiti poklone ove godine.
Djed Mraz je tijekom godine redovito zapisivao tko je bio dobar, tako da te podatke ima zapisane u svojoj bilježnici.
Rudolf mora usporediti imena djece s popisa s onima u Djedovoj bilježnici i zaokružiti one koji se nalaze na obje liste te napraviti novi popis i sortirati ih abecedno.


2. zadatak
•Napiši funkciju koja prima dvije liste (Djedovu i Rudolfovu) te vraća abecedno sortiranu listu samo onih imena koja se pojavljuju i kod Djeda i kod Rudolfa
Rješenje:
def usporedi(djed, rudolf):
konacni = []
for c in rudolf:
if c in djed:
konacni.append(c)
return sorted(konacni)Djed konačno ima popis djece kod koje mora stići no postoji još jedan problem.
Rudolf je odlučio učiti geografiju. I ne želi nikuda ići dok ne nauči nabrojati planete sunčevog sustava od najmanjeg do najvećeg. U Djedovoj bilježnici našao je neki čudan popis i sada pokušava otkriti koji je planet najmanji, koji najveći itd...
Tvoj zadatak je pomoći Rudolfu da što prije sortira planete od najmanjeg do najvećeg i krene s Djedom Mrazom na put!


3. zadatak
Napiši program koji će iz priložene liste ispisati nazive planeta od najmanjeg do najvećeg

planeti = [
#naziv, polumjer, udaljenost Zemlja-Sunce
["Merkur",2440, 0.395],
["Venera", 6052, 0.723],
["Zemlja", 6370, 1.000],
["Mars", 3396, 1.530],
["Jupiter",71492, 5.210],
["Saturn",60268, 9.551],
["Uran",25559, 19.213],
["Neptun",26764,30.070]
]
Rješenje:
planeti = [
["Merkur",2440, 0.395],
["Venera", 6052, 0.723],
["Zemlja", 6370, 1.000],
["Mars", 3396, 1.530],
["Jupiter",71492, 5.210],
["Saturn",60268, 9.551],
["Uran",25559, 19.213],
["Neptun",26764,30.070]
]
def velicina(element):
return element[1]
planeti.sort(key = velicina)
for i in planeti:
print(i[0])
Djed Mraz ima popis djece do koje mora doći, Rudolf je sretan pošto je naučio planete po veličini, sada još samo ostaje okupiti sve sobove i posložiti ih u red po dvoje ispred saonica.
Djed ih svake godine posloži abecednim redom (po prezimenu) no ove godine je imao toliko problema da je zaspao u saonicama. Pomozi Rudolfu da sortira sobove po prezimenu i posloži ih ispred saonica!

4. zadatak
Napiši funkciju koja će zadanu listu sortirati po prezimenu:
sobovi = ["Dasher Disney", "Dancer Moore", "Prancer Jones",
"Vixen Hall", "Comet Smith", "Cupid Knight", "Donder Taylor",
"Blitzen Claus" ]Rješenje:
sobovi = ["Dasher Disney", "Dancer Moore", "Prancer Jones",
"Vixen Hall", "Comet Smith", "Cupid Knight",
"Donder Taylor", "Blitzen Claus" ]
print (sorted(sobovi))
sobovi.sort(key=lambda s: s.split()[1])
print (sobovi)
Sobovi su spremni, Djed Mraz se probudio i svi su uzbuđeni što uskoro kreću na put!
Djed je već dao Rudolfu znak za polazak no onda se pojavio novi problem. Dotrčao je mali patuljak Bingle i dao Djedu neobičnu poruku.....

Poruka je glasila....

OKEILEKOUNDSOOJASLBOEM OJVEDIOLC5ABAOŠOPNIJ!HIJRINOUKEO!
5. zadatak
Pomozi Djedu da dešifrira ovu važnu poruku i krene na put! Božična čarolija sve nas čeka!
Pomoć:
Podijeli s brojem 5 duljinu poruke
Rješenje:
a = "OKEILEKOUNDSOOJASLBOEMOJVEDIOLC5ABAOŠOPNIJ!HIJRINOUKEO!"
poruka = ""
n = len(a)//5
for k in range(n):
for i in range(k,len(a),n):
poruka += a[i]
print(poruka) #Izlaz: OSOBIKOJAJEOVORIJEŠILADONESIPOKLONUOBLIKUOCJENE5!ODMAH!
Računalno razmišljanje i programiranje:
By Ivana V
Računalno razmišljanje i programiranje:
- 254