Buborékrendezés (bubble sort)

  • Informatika
  • Buborékrendezés (bubble…
  • buborékrendezés komplexitás
  • buborékrendezés…
  • buborékrendezés python
  • rendezési algoritmusok
  • adatszerkezetek

Podcast

Buborékrendezés0:00 / 8:05
0:001:00 remaining

A buborékrendezés (bubble sort) egy alapvető rendezési algoritmus, amelyet gyakran tanítanak az informatikai alapok során, mivel működése könnyen megérthető. Bár egyszerűsége vonzó, hatékonysága miatt ritkán alkalmazzák nagy adathalmazok valós idejű rendezésére. Ebben az átfogó cikkben részletesen bemutatjuk a buborékrendezést, annak működési elvét, időbonyolultságát és optimalizálási lehetőségeit.

Mi a buborékrendezés (Bubble Sort)? Egy átfogó elemzés

A buborékrendezés (bubble sort) egy egyszerű rendezési algoritmus, amely ismételten végigmegy egy listán. Összehasonlítja a szomszédos elemeket, és felcseréli őket, ha rossz sorrendben vannak. Az algoritmus nevét onnan kapta, hogy a nagyobb elemek fokozatosan „felbuborékolnak” a lista végére, míg a kisebbek „lesüllyednek” az elejére.

Bár könnyen érthető és implementálható, hatékonysága alacsonyabb a fejlettebb rendezési algoritmusokhoz képest. Főként oktatási célokra, az algoritmusok alapjainak bemutatására alkalmas.

A buborékrendezés működési elve lépésről lépésre

A buborékrendezés alapelve az, hogy a lista elemeit páronként összehasonlítja. Ha a sorrendjük nem megfelelő, felcseréli őket. Ezt a folyamatot addig ismétli, amíg egy teljes menet során nem történik csere, ami azt jelzi, hogy a lista rendezetté vált.

Tekintsünk egy növekvő sorrendbe rendezendő számokból álló listát. Az algoritmus a következőképpen működik:

  1. Első menet: Az algoritmus a lista elejétől indulva összehasonlítja az első és a második elemet. Ha az első nagyobb, mint a második, felcseréli őket. Ezután összehasonlítja a második és a harmadik elemet, és szükség esetén felcseréli őket. Ezt a folyamatot egészen a lista végéig folytatja. Az első menet végére a legnagyobb elem garantáltan a lista utolsó pozíciójára kerül.

  2. További menetek: Az algoritmus megismétli az előző lépést, de minden egyes menetben eggyel kevesebb elemet kell vizsgálni. Ennek oka, hogy a lista végén lévő elemek már a helyükön vannak. Például a második menetben a lista utolsó eleme már rendezettnek tekinthető, így csak az első n-1 elemet kell vizsgálni.

  3. Leállítási feltétel: Az algoritmus akkor áll le, ha egy teljes menet során nem történt egyetlen csere sem. Ez azt jelenti, hogy a lista már rendezett.

Példa a buborékrendezésre: Vizualizáció

Vegyünk egy rendezetlen listát: [5, 1, 4, 2, 8]

1. menet:

  • [5, 1, 4, 2, 8] → Összehasonlítjuk az 5-öt és az 1-et. 5 > 1, tehát csere: [1, 5, 4, 2, 8]
  • [1, 5, 4, 2, 8] → Összehasonlítjuk az 5-öt és a 4-et. 5 > 4, tehát csere: [1, 4, 5, 2, 8]
  • [1, 4, 5, 2, 8] → Összehasonlítjuk az 5-öt és a 2-t. 5 > 2, tehát csere: [1, 4, 2, 5, 8]
  • [1, 4, 2, 5, 8] → Összehasonlítjuk az 5-öt és a 8-at. 5 < 8, nincs csere.
  • Az első menet végén a legnagyobb elem (8) a helyére került: [1, 4, 2, 5, 8]

2. menet: (Az utolsó elem (8) már a helyén van, így csak az első 4 elemet vizsgáljuk)

  • [1, 4, 2, 5, 8] → Összehasonlítjuk az 1-et és a 4-et. 1 < 4, nincs csere.
  • [1, 4, 2, 5, 8] → Összehasonlítjuk a 4-et és a 2-t. 4 > 2, tehát csere: [1, 2, 4, 5, 8]
  • [1, 2, 4, 5, 8] → Összehasonlítjuk a 4-et és az 5-öt. 4 < 5, nincs csere.
  • A második menet végén a második legnagyobb elem (5) a helyére került: [1, 2, 4, 5, 8]

3. menet: (Az utolsó két elem (5, 8) már a helyén van, így csak az első 3 elemet vizsgáljuk)

  • [1, 2, 4, 5, 8] → Összehasonlítjuk az 1-et és a 2-t. 1 < 2, nincs csere.
  • [1, 2, 4, 5, 8] → Összehasonlítjuk a 2-t és a 4-et. 2 < 4, nincs csere.
  • A harmadik menet végén a harmadik legnagyobb elem (4) a helyére került: [1, 2, 4, 5, 8]

4. menet: (Az utolsó három elem (4, 5, 8) már a helyén van, így csak az első 2 elemet vizsgáljuk)

  • [1, 2, 4, 5, 8] → Összehasonlítjuk az 1-et és a 2-t. 1 < 2, nincs csere.
  • Ebben a menetben nem történt csere. Az algoritmus leáll.

A lista rendezett: [1, 2, 4, 5, 8]

Check what you already know

Test · 20 questions · first 3 free

Question 1 of 30%

Arányos a buborékrendezés összehasonlításainak és cseréinek száma a bemeneti lista méretének négyzetével?

Practise it with flashcards

12 cards · first 3 free, no account

1 / 12

Mi a buborékrendezés?

A buborékrendezés egy egyszerű rendezési algoritmus, amely ismételten végigmegy egy listán, összehasonlítja a szomszédos elemeket, és felcseréli őket,

Tap to flip · Swipe to navigate

A buborékrendezés időbonyolultsága (komplexitás)

A buborékrendezés hatékonyságát az időbonyolultságával jellemezzük, ami azt mutatja meg, hogyan növekszik az algoritmus futási ideje a bemeneti adatok méretének (n) függvényében. A buborékrendezés esetében az összehasonlítások és cserék száma a bemeneti lista méretének négyzetével arányos.

Legrosszabb eset (Worst-case)

Akkor fordul elő, ha a lista fordított sorrendben van. Minden összehasonlítás cserét eredményez. Az összehasonlítások és cserék száma ekkor közel n·(n-1)/2, ami O(n²) nagyságrendű. Például, ha n = 1000, akkor körülbelül 500 000 műveletre van szükség.

Átlagos eset (Average-case)

Átlagosan is O(n²) az időbonyolultság, mivel az elemek nagyjából fele cserére szorul.

Legjobb eset (Best-case)

Akkor fordul elő, ha a lista már rendezett. Az algoritmus ekkor is végigmegy a listán legalább egyszer, hogy ellenőrizze, történt-e csere. Az alap buborékrendezés még ekkor is O(n²) műveletet végezhet, ha nincs optimalizálva a korai leállásra. Az optimalizált változatnál a legjobb eset O(n).

Az O(n²) időbonyolultság azt jelenti, hogy a buborékrendezés nem hatékony nagy adathalmazok esetén. Például, ha egy 1000 elemből álló listát kell rendezni, az algoritmus körülbelül 1000² = 1 000 000 műveletet végez a legrosszabb esetben. Egy 10 000 elemből álló lista esetén ez már 100 000 000 műveletet jelent, ami jelentős futási időt eredményez.

Buborékrendezés optimalizálás: Gyorsabb futás már rendezett listán

A buborékrendezés optimalizálható, hogy a legjobb esetben (amikor a lista már rendezett) gyorsabban leálljon. Ehhez egy logikai változót (például csere_tortent) vezetünk be, amely jelzi, hogy az aktuális menet során történt-e csere. Ha egy menet végén a változó értéke hamis (azaz nem történt csere), akkor a lista már rendezett, és az algoritmus leállhat.

Optimalizált buborékrendezés pszeudokód

ELJÁRÁS Buborékrendezés(lista)
 n = lista hossza
 ismétlés = igaz
 ciklus_szamlalo = 0
 AMÍG ismétlés ÉS ciklus_szamlalo < n-1
 ismétlés = hamis
 CIKLUS i = 0-tól n - 1 - ciklus_szamlalo - 1-ig
 HA lista[i] > lista[i+1] AKKOR
 csere(lista[i], lista[i+1])
 ismétlés = igaz
 VÉGE HA
 VÉGE CIKLUS
 ciklus_szamlalo = ciklus_szamlalo + 1
 VÉGE AMÍG
VÉGE ELJÁRÁS

Optimalizált buborékrendezés Python kóddal

def buborekrendezes(lista):
 n = len(lista)
 for i in range(n - 1):
 csere_tortent = False
 for j in range(n - 1 - i):
 if lista[j] > lista[j + 1]:
 lista[j], lista[j + 1] = lista[j + 1], lista[j] # Csere
 csere_tortent = True
 if not csere_tortent:
 break # Ha egy menetben sem történt csere, a lista rendezett
 return lista

# Példa használat:
rendezetlen_lista = [5, 1, 4, 2, 8]
rendezett_lista = buborekrendezes(rendezetlen_lista)
print(f"Rendezett lista: {rendezett_lista}")

rendezett_lista_mar_rendezett = [1, 2, 3, 4, 5]
rendezett_lista_mar_rendezett = buborekrendezes(rendezett_lista_mar_rendezett)
print(f"Már rendezett lista: {rendezett_lista_mar_rendezett}")

Gyakori hibák és tévhitek a buborékrendezéssel kapcsolatban

A buborékrendezés egyszerűsége ellenére is vannak gyakori hibák és tévhitek, amelyekkel a diákok és kezdők találkozhatnak.

  1. A ciklushatárok helytelen beállítása: Gyakori hiba, hogy a belső ciklus túl messzire megy. Megpróbálja összehasonlítani az utolsó elemet egy nem létező n+1-edik elemmel, ami indexhiba (out of bounds) okoz. Fontos, hogy a belső ciklus határa minden menetben csökkenjen, mivel a legnagyobb elemek már a helyükön vannak a lista végén.

  2. Az optimalizáció hiánya: Sok kezdő implementáció kihagyja a csere_tortent jelzőt. Ez azt eredményezi, hogy az algoritmus akkor is végigfut az összes lehetséges meneten, ha a lista már rendezett. Ez feleslegesen sok műveletet jelent a legjobb esetben.

  3. A buborékrendezés hatékonyságának félreértése: Bár egyszerű, a buborékrendezés nem hatékony nagy adathalmazok esetén. Téves az a feltételezés, hogy minden rendezési feladatra alkalmas. Fontos megérteni, hogy más algoritmusok (pl. gyorsrendezés, összefésülő rendezés) sokkal jobb teljesítményt nyújtanak a legtöbb gyakorlati esetben.

  4. Stabilitás: A buborékrendezés egy stabil rendezési algoritmus. Ez azt jelenti, hogy az azonos értékű elemek relatív sorrendje megmarad a rendezés során. Ezt gyakran figyelmen kívül hagyják, de bizonyos alkalmazásoknál fontos tulajdonság.

Amit megfigyelhetünk egy buborékrendezés szimulációban

Az interaktív szimuláció kiváló lehetőséget biztosít a buborékrendezés működésének lépésenkénti megértésére. A szimulációban a következőket érdemes megfigyelni és kipróbálni:

  • Összehasonlítások és cserék lépésenkénti végrehajtása: Figyelje meg, ahogy az algoritmus páronként összehasonlítja az elemeket. Láthatja, mikor történik csere, és mikor nem. Ez segít megérteni, hogyan mozognak az elemek a listában.

  • A legnagyobb elemek „felbuborékolása”: Kövesse nyomon, ahogy a legnagyobb értékű elemek fokozatosan a lista végére kerülnek minden egyes menet végén. Ez vizuálisan megerősíti az algoritmus nevét adó jelenséget.

  • A rendezett rész növekedése: Észreveheti, hogy minden menet után a lista végén egyre több elem kerül a helyére, és ezeket az elemeket a további menetek már nem vizsgálják újra.

  • Az optimalizáció hatása: Ha a szimuláció támogatja az optimalizált változatot, figyelje meg, mi történik, ha egy már rendezett vagy majdnem rendezett listát ad meg. Láthatja, hogy az algoritmus sokkal hamarabb leáll, ha egy menet során nem történik csere.

  • Különböző bemeneti adatok: Próbáljon ki különböző rendezetlen listákat (pl. fordított sorrendű, véletlenszerű, majdnem rendezett). Figyelje meg, hogyan változik az összehasonlítások és cserék száma, valamint a futási idő. Ez segít megérteni az időbonyolultság fogalmát a gyakorlatban.

  • A műveletek száma: A szimuláció gyakran megjeleníti az elvégzett összehasonlítások és cserék számát. Hasonlítsa össze ezeket az értékeket a lista méretével (n) és a korábban tárgyalt O(n²) komplexitással. Láthatja, hogy a műveletek száma valóban négyzetesen növekszik a lista méretével.

A szimulációval való interakció segít elmélyíteni a buborékrendezés működésének megértését, és vizuálisan bemutatja az algoritmus erősségeit és gyengeségeit.

Gyakran Ismételt Kérdések (GYIK) a buborékrendezésről

Mire használható a buborékrendezés? (Buborékrendezés érettségi)

Bár a buborékrendezés nem hatékony nagy adathalmazok esetén, oktatási célokra kiválóan alkalmas. Ideális az algoritmusok alapjainak bemutatására, mivel működési elve könnyen vizualizálható és érthető. Gyakran szerepel informatikai érettségi feladatok vagy egyetemi bevezetések keretein belül.

Miért hívják buborékrendezésnek?

Az algoritmus nevét onnan kapta, hogy minden menet során a legnagyobb (vagy legkisebb, a rendezés irányától függően) elem fokozatosan „felbuborékol” a lista végére (vagy elejére), hasonlóan ahhoz, ahogy a buborékok felemelkednek a vízben.

Milyen időbonyolultságú a buborékrendezés?

A buborékrendezés időbonyolultsága a legrosszabb és átlagos esetben O(n²), ami azt jelenti, hogy a futási idő a lista elemeinek számának négyzetével arányosan növekszik. Optimalizált esetben, ha a lista már rendezett, a legjobb eset O(n).

Stabil rendezési algoritmus a buborékrendezés?

Igen, a buborékrendezés egy stabil rendezési algoritmus. Ez azt jelenti, hogy ha a listában azonos értékű elemek vannak, akkor a rendezés után az eredeti relatív sorrendjük megmarad.

Melyek a buborékrendezés hátrányai?

A buborékrendezés legnagyobb hátránya az alacsony hatékonysága, különösen nagy adathalmazok esetén, mivel időbonyolultsága O(n²). Ez más, hatékonyabb algoritmusokhoz (pl. gyorsrendezés, összefésülő rendezés) képest nagyon lassúvá teszi.

Practise it, don't just read it

12 flashcards, a test with explanations and a podcast for this topic. The account is free and you pick up right where you left off.

  • No credit card
  • Web and mobile app
  • 330,000+ students
Start for free

Related topics