Rendezés

Ebben a posztban megnézzük, hogy miként rendezhető egy lista, azaz miként lehet a 2, 3, 1, 4-ből 1, 2, 3, 4-et csinálni.

Rendezésből sokféle van, majd egy napon átnézzük őket. A videóban megnézzük, de tényleg csak megnézzük az egyszerű cserés rendezést, de aztán a lényegre térünk, ami a Python sorted() függvénye.

 

Hogyan működik az egyszerű cserés rendezés?

Ezt igazság szerint egyelőre nem érdemes megtanulnod, csak egyszer-kétszer átfutnod, hogy sejtsd, hogy mi történik, amikor rendezel.


lista = [5, 3, 9, 1, 7]

for i in range(len(lista)-1):
    for j in range(i+1, len(lista)):
        print(i, j, lista, end='')
        if lista[i] > lista [j]:
            lista[i], lista[j] = lista[j], lista[i]
            print('!', lista[i], lista[j])
            print('   ', lista)
        else:
            print('')
        

Valójában a print()-es sorok nem érdekesek, csak neked most, hogy értsd, hogy mi történik. A külső for-ciklus indexek szerint végigjárja a listát az elejétől a vége előttig, a belső meg minden esetben az épp aktuális indextől a végéig. Az külső és a belső ciklus épp aktuális elemét összehasonlítjuk (6. sor), ha kell, akkor cseréljük (7. sor).

Ez a legpitébb rendezési algoritmus, van még minimumkiválasztásos rendezés, buborékrendezés, javított buborékos rendezés, beillesztéses rendezés, javított beillesztéses rendezés, szétosztó rendezés, számlálva szétosztó rendezés, számláló rendezés, gyorsrendezés, a rumos csokoládét, a lyukas csokoládét, a kerek csokoládét, a lapos csokoládét…

Ezek közül néhányat el is táncolnak.

A sorted() függvény és a list.sort() tagfüggvény

Valójában bennünket ez a kettő érdekel. A paraméterezésük erősen hasonló:

  • a rendezendő lista a sorted() függvénynél, a list.sort() esetében nyilván a list-et rendezzük, például sorted(autók) vagy autók.sort()
  • ha fordítva akarunk rendezni: reverse=True
  • a nem úgy akarunk rendezni, ahogy a józan ész diktálja: kulcsfüggvény

A két sort-függvény lényegében ugyanaz, és mindkettő mocsok gyors, nagyon jó hírnek örvend a programozók világában. A kulcsfüggvény pedig az igazi menő dolog, de hát nézd csak meg a fenti videót! Megjegyzés: ide kapcsolódnának a lambdafüggvények, ha nem tudsz nyugton ülni az alfeleden, keress rá.

Feladatok

F0036a: Mondd el, hogy mi a különbség sorted(lista) és lista.sort() között! (Megoldás a videóban)

F0036b: Állíts elő 100 tagú, 1 és 1000 közötti véletlenszámokból álló rendezett listát! (Megoldás itt.)

A következőkben ezzel a fájllal dolgozz (Az Újpest azért lett rövid U-s, hogy ne okozzon gondot az angol nyelvű karaktereket figyelembe vevő rendezéskor.):

Videoton: 19 10 4 5 39-19 34
Budapest Honvéd: 19 10 4 5 32-17 34
Vasas: 19 10 4 5 30-18 34
Ferencváros: 19 8 6 5 34-27 30
Ujpest: 19 6 9 4 30-26 27
Mezőkövesd: 19 7 6 6 21-22 27
Szombathelyi Haladás: 19 7 5 7 22-23 26
Paks: 19 5 8 6 18-24 23
Diósgyőr: 19 6 3 10 24-36 21
Debreceni VSC: 19 5 5 9 20-26 20
MTK: 19 4 8 7 12-21 20
Gyirmót: 19 3 4 12 8-31 13

(A tábla a foci NB I. állását mutatja, az oszlopok a csapat neve, játszott meccsek, győzelem, döntetlen, vereség, rúgott-kapott gólok, pontszám, forrás: http://www.focikatalogus.hu/nb-i, 2017. január 3-i állapot)

F0036c: Írd ki a táblát a csapatok neve szerint ABC-sorrendben! (Megoldás itt.)

F0036d: Írd ki a táblát a vereségek szerinti növekvő sorrendben! (Megoldás itt.)

F0036e: Írd ki a táblát az elért pontok szerinti fordított sorrendben! (Megoldás itt.)

F0036f: Számold ki a gólkülönbséget és rendezz aszerint – írd ki így a táblát! (Megoldás itt.)

Legutóbb szétválogattunk. Legközelebb metszetet képezünk.

 

Reklámok

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s