Beszúrásos rendezés (insertion sort)

  • Informatika
  • Beszúrásos rendezés…
  • Beszúrásos rendezés elemzés
  • Rendezési algoritmusok
  • Időkomplexitás
  • Térkomplexitás
  • Algoritmus stabilitása

Podcast

Beszúrásos rendezés: A lassúnak hitt algoritmus, ami meglepően gyors0:00 / 10:35
0:001:00 remaining

A rendezés az informatikában kulcsfontosságú feladat, amely az adatok egy meghatározott szempont szerinti elrendezését jelenti. Számos algoritmus létezik erre, és a beszúrásos rendezés (Insertion Sort) az egyik legegyszerűbb, mégis nagyon hasznos módszer, különösen kis méretű vagy már majdnem rendezett adathalmazok esetén. Ez az algoritmus gyakori téma az egyetemi és érettségi vizsgákon is, ezért érdemes alaposan megismerni a működését és tulajdonságait.

Bevezetés a Beszúrásos Rendezésbe és Működési Elve

A beszúrásos rendezés (angolul: Insertion Sort) az egyik alapvető rendezési algoritmus, amelyet az egyszerűsége miatt gyakran tanítanak a programozási kurzusokon. Kiemelkedő szerepet játszik kis adathalmazok hatékony rendezésében, vagy ha az adatok már közel rendezett állapotban vannak.

Az algoritmus alapelve könnyen megérthető, ha elképzeljük, hogyan rendezünk egy pakli kártyát a kezünkben. Van egy rendezett sorozatunk a bal kezünkben, és a rendezetlen kártyák a jobb kezünkben. Egyenként vesszük ki a kártyákat a jobb kezünkből, és beillesztjük a bal kezünkben lévő rendezett sorozat megfelelő helyére. Ezzel a bal kezünkben lévő sorozat bővül, miközben megőrzi rendezettségét.

Ez az analógia tökéletesen leírja a beszúrásos rendezés működését. Az adathalmazt két részre osztjuk: egy már rendezett és egy rendezetlen részre. Kezdetben a rendezett rész csak az első elemet tartalmazza, a többi elem a rendezetlen részben marad. Az algoritmus iteratívan kiválaszt egy elemet a rendezetlen részből (ezt nevezzük „kulcsnak”), és beilleszti a megfelelő helyre a rendezett részbe, eltolva a nagyobb elemeket, hogy helyet csináljon neki.

Az Algoritmus Részletes Leírása

Egy n elemű tömb rendezéséhez a következő lépéseket kell végrehajtani:

  1. Kezdeti állapot: Az első elem (index 0) önmagában egy rendezett részlistát alkot. A maradék n-1 elem alkotja a rendezetlen részlistát.
  2. Iteráció: Az algoritmus a második elemtől (index 1) kezdve halad a tömb végéig (index n-1). Minden egyes iterációban kiválasztja az aktuális elemet a rendezetlen részből, ezt nevezzük „kulcsnak”.
  3. Beszúrás: A kiválasztott kulcsot összehasonlítja a már rendezett részlista elemeivel, jobbról balra haladva. Ha egy elem nagyobb, mint a kulcs, akkor azt egy pozícióval jobbra tolja. Ezt addig ismétli, amíg nem talál egy olyan elemet, amely kisebb vagy egyenlő a kulccsal, vagy amíg el nem éri a rendezett részlista elejét.
  4. Helyezés: Miután megtalálta a megfelelő pozíciót, a kulcsot beilleszti oda. Ezzel a rendezett részlista egy elemmel bővül, és továbbra is rendezett marad.
  5. Folytatás: Az algoritmus folytatódik a következő rendezetlen elemmel, amíg az összes elem be nem illesztésre került a rendezett részbe.

Példa a Beszúrásos Rendezésre

Nézzünk egy konkrét példát a [5, 2, 4, 6, 1, 3] számsorozat rendezésére a beszúrásos rendezés segítségével.

Kezdeti tömb: [5, 2, 4, 6, 1, 3]

1. lépés (i = 1, kulcs = 2):

  • A rendezett rész: [5]
  • A kulcs 2. Összehasonlítjuk az 5-tel.
  • Mivel 2 < 5, az 5-öt jobbra toljuk.
  • A 2-t beillesztjük az 5 elé.
  • Tömb állapota: [2, 5, 4, 6, 1, 3]

2. lépés (i = 2, kulcs = 4):

  • A rendezett rész: [2, 5]
  • A kulcs 4. Összehasonlítjuk az 5-tel.
  • Mivel 4 < 5, az 5-öt jobbra toljuk.
  • Összehasonlítjuk a 2-vel.
  • Mivel 4 > 2, a 4-et beillesztjük a 2 és az 5 közé.
  • Tömb állapota: [2, 4, 5, 6, 1, 3]

3. lépés (i = 3, kulcs = 6):

  • A rendezett rész: [2, 4, 5]
  • A kulcs 6. Összehasonlítjuk az 5-tel.
  • Mivel 6 > 5, a 6 már a megfelelő helyen van (az 5 után).
  • Tömb állapota: [2, 4, 5, 6, 1, 3]

4. lépés (i = 4, kulcs = 1):

  • A rendezett rész: [2, 4, 5, 6]
  • A kulcs 1. Összehasonlítjuk a 6-tal.
  • Mivel 1 < 6, a 6-ot jobbra toljuk.
  • Összehasonlítjuk az 5-tel.
  • Mivel 1 < 5, az 5-öt jobbra toljuk.
  • Összehasonlítjuk a 4-gyel.
  • Mivel 1 < 4, a 4-et jobbra toljuk.
  • Összehasonlítjuk a 2-vel.
  • Mivel 1 < 2, a 2-t jobbra toljuk.
  • Elértük a tömb elejét. A 1-et beillesztjük a legelejére.
  • Tömb állapota: [1, 2, 4, 5, 6, 3]

5. lépés (i = 5, kulcs = 3):

  • A rendezett rész: [1, 2, 4, 5, 6]
  • A kulcs 3. Összehasonlítjuk a 6-tal.
  • Mivel 3 < 6, a 6-ot jobbra toljuk.
  • Összehasonlítjuk az 5-tel.
  • Mivel 3 < 5, az 5-öt jobbra toljuk.
  • Összehasonlítjuk a 4-gyel.
  • Mivel 3 < 4, a 4-et jobbra toljuk.
  • Összehasonlítjuk a 2-vel.
  • Mivel 3 > 2, a 3-at beillesztjük a 2 és a 4 közé.
  • Tömb állapota: [1, 2, 3, 4, 5, 6]

Végeredmény: [1, 2, 3, 4, 5, 6] – A tömb rendezett.

Check what you already know

Test · 20 questions · first 3 free

Question 1 of 30%

A beszúrásos rendezés pszeudokódjában az 'i' változóval jelölt ciklus a tömb első elemétől (index 0) kezdve iterál.

Practise it with flashcards

40 cards · first 3 free, no account

1 / 40

Hogyan írja le az időkomplexitás az algoritmus hatékonyságát?

Azt mutatja meg, hogyan növekszik az algoritmus futási ideje az adathalmaz méretével (n).

Tap to flip · Swipe to navigate

Beszúrásos Rendezés Idő- és Térkomplexitása

Az algoritmus hatékonyságát az idő- és térkomplexitás írja le, amelyek azt mutatják meg, hogyan növekszik az algoritmus futási ideje, illetve memóriahasználata az adathalmaz méretével (n).

Időkomplexitás (Beszúrásos rendezés elemzés)

A beszúrásos rendezés időkomplexitása a következőképpen alakul:

  • Legrosszabb eset (Worst Case): O(n²)

  • Ez akkor fordul elő, ha a tömb fordított sorrendben van rendezve (pl. [6, 5, 4, 3, 2, 1]). Minden egyes elem beszúrásakor a kulcsot a rendezett részlista összes elemével össze kell hasonlítani, és az összes elemet el kell tolni. Ez azt jelenti, hogy az i-edik elem beszúrása i összehasonlítást és i eltolást igényelhet, ami négyzetes növekedést eredményez.

  • Legjobb eset (Best Case): O(n)

  • Ez akkor következik be, ha a tömb már rendezett (pl. [1, 2, 3, 4, 5, 6]). Ebben az esetben minden kulcsot csak a rendezett részlista utolsó elemével kell összehasonlítani, és azonnal megállapítható, hogy a kulcs a megfelelő helyen van. Minden iterációban csak egy összehasonlítás történik, így a futási idő lineáris.

  • Átlagos eset (Average Case): O(n²)

  • Átlagosan, egy véletlenszerűen elrendezett tömb esetén az időkomplexitás szintén O(n²). Ennek oka, hogy minden elem átlagosan a rendezett részlista feléig tolódik el, ami továbbra is négyzetes növekedést eredményez.

Fontos megjegyezni, hogy az O(n²) azt jelenti, ha az adathalmaz mérete megduplázódik, a futási idő körülbelül megnégyszereződik. Az O(n) azt jelenti, hogy a méret duplázódásával a futási idő is megduplázódik. Éppen ezért a beszúrásos rendezés nem ideális nagy adathalmazok rendezésére.

Térkomplexitás

A beszúrásos rendezés egy helyben rendező (in-place) algoritmus, ami azt jelenti, hogy a rendezéshez minimális extra memóriára van szüksége. A rendezés során csak néhány változót (pl. a kulcs és az indexek tárolására) használ, így a térkomplexitása O(1). Ez előnyös olyan környezetekben, ahol a memória korlátozott.

A Beszúrásos Rendezés Stabilitása és Előnyei

Stabilitás

Egy rendezési algoritmus akkor stabil, ha az azonos értékű elemek relatív sorrendje megmarad a rendezés során. Például, ha van két „A” értékű elem, és az egyik az eredeti listában a másik előtt állt, akkor a rendezett listában is az előtt fog állni.

A beszúrásos rendezés stabil algoritmus.

Ennek oka, hogy amikor egy kulcsot beillesztünk a rendezett részbe, az összehasonlításokat úgy végezzük, hogy a kulcsot csak akkor toljuk jobbra, ha az aktuális elem szigorúan nagyobb, mint a kulcs. Ha az aktuális elem egyenlő a kulccsal, akkor a kulcsot az egyenlő elem után illesztjük be, ezzel megőrizve az eredeti sorrendet.

A stabilitás különösen kritikus lehet, ha az elemek nem csak egy kulcsértékkel rendelkeznek, hanem más adatokkal is, és az eredeti sorrend megőrzése fontos az azonos kulcsértékű elemek között (pl. egy adatbázis rekordjainak rendezése több kulcs alapján).

Előnyök és Hátrányok

Előnyök:

  • Egyszerűség: Könnyen érthető és implementálható, ideális kezdők számára.
  • Hatékonyság kis adathalmazokon: Kisebb n értékek esetén (általában 10-20 elem alatt) gyakran gyorsabb, mint az összetettebb O(n log n) algoritmusok, a konstans tényezők miatt.
  • Hatékonyság majdnem rendezett adatokon: Ha az adatok már majdnem rendezettek, az algoritmus közel lineáris időben (O(n)) fut. Ezért is használják gyakran más, komplexebb rendezési algoritmusok (pl. Gyorsrendezés vagy összefésülő rendezés) belső segédalgoritmusaként, kis részlisták rendezésére.
  • Stabilitás: Megőrzi az azonos értékű elemek relatív sorrendjét, ami bizonyos alkalmazásokban elengedhetetlen.
  • Helyben rendezés: Csak O(1) extra memóriát igényel, ami memória-korlátos környezetekben nagy előny.
  • Adaptív: A futási ideje alkalmazkodik az adatok rendezettségéhez.

Hátrányok:

  • Lassú nagy adathalmazokon: Nagy n értékek esetén az O(n²) időkomplexitás miatt jelentősen lassabb, mint a fejlettebb rendezési algoritmusok.

Algoritmus (Pszeudokód)

Az alábbiakban egy szövegesen leírt pszeudokód látható a beszúrásos rendezéshez, amely segít megérteni a belső logikát:

ELJÁRÁS BeszúrásosRendezés(Tömb, n)
 // Tömb: a rendezendő adatok listája
 // n: a tömb elemeinek száma
 CIKLUS i = 1-től n-1-ig
 kulcs = Tömb[i] // Az aktuális elem, amit beillesztünk
 j = i - 1 // Az index a rendezett részlista utolsó elemére mutat

 // Mozgassa el a Tömb[0...i-1] elemeit, amelyek nagyobbak, mint a kulcs,
 // egy pozícióval jobbra az aktuális pozíciójuktól
 AMÍG j >= 0 ÉS Tömb[j] > kulcs
 Tömb[j + 1] = Tömb[j]
 j = j - 1
 VÉGE AMÍG

 Tömb[j + 1] = kulcs // Helyezze be a kulcsot a megfelelő pozícióba
 VÉGE CIKLUS
VÉGE ELJÁRÁS

Gyakori Hibák és Félreértések a Beszúrásos Rendezés kapcsán

Fontos tisztázni néhány gyakori tévedést, amelyek a beszúrásos rendezéssel kapcsolatban felmerülhetnek.

  1. Összetévesztés más egyszerű rendezésekkel: A beszúrásos rendezést gyakran összetévesztik a kiválasztásos rendezéssel (Selection Sort) vagy a buborékrendezéssel (Bubble Sort), mivel mindhárom egyszerű, O(n²) komplexitású algoritmus. A különbség az, hogy a beszúrásos rendezésnél az elemeket a rendezett részbe illesztjük be, míg a kiválasztásos rendezésnél a legkisebb elemet keressük meg és cseréljük ki, a buborékrendezésnél pedig a szomszédos elemeket cserélgetjük.

  2. A stabilitás fogalmának félreértése: Sokan nem értik pontosan, mit jelent a stabilitás, vagy miért fontos. A stabilitás kritikus lehet, ha az elemek nem csak egy kulcsértékkel rendelkeznek, hanem más adatokkal is, és az eredeti sorrend megőrzése fontos az azonos kulcsértékű elemek között.

  3. A „majdnem rendezett” adatok hatékonyságának alulértékelése: Bár az algoritmus átlagos és legrosszabb esetben O(n²), a majdnem rendezett adatokon mutatott O(n) teljesítménye miatt gyakran használják más, összetettebb rendezési algoritmusok belső, kis részlisták rendezésére szolgáló segédalgoritmusként.

Beszúrásos Rendezés Szimulációban: Mit figyeljünk meg?

Az interaktív szimulációk kiváló lehetőséget biztosítanak a beszúrásos rendezés működésének mélyebb megértésére. A diákok a következőket figyelhetik meg és próbálhatják ki:

  • A kulcs beszúrásának lépésről lépésre történő követése: Vizuálisan követhető, ahogy az algoritmus kiválaszt egy elemet (a „kulcsot”) a rendezetlen részből, majd lépésről lépésre összehasonlítja azt a már rendezett rész elemeivel. Látható, ahogy az elemek jobbra tolódnak, hogy helyet csináljanak a kulcsnak, majd a kulcs bekerül a megfelelő pozícióba.
  • Különböző kezdeti állapotok hatása: Kísérletezhetünk teljesen rendezett, fordított sorrendű, véletlenszerűen elrendezett vagy majdnem rendezett adathalmazokkal. Megfigyelhető, hogy a rendezett tömb esetén alig történik eltolás (O(n)), míg a fordított sorrendű tömbnél minden elem beszúrása sok eltolással jár (O(n²)). Ez segít vizuálisan megérteni az időkomplexitások közötti különbséget.
  • Elemek mozgásának vizualizálása: Az elemek mozgása, összehasonlítása és eltolása animált formában jelenik meg, ami segít megérteni, hogyan manipulálja az algoritmus az adatokat a rendezés során.
  • A rendezett és rendezetlen rész elkülönítése: A szimuláció gyakran vizuálisan is elkülöníti a tömb már rendezett és még rendezetlen részét, így könnyebben követhető az algoritmus előrehaladása.
  • Stabilitás megfigyelése: Ha a szimuláció támogatja az azonos értékű elemek megkülönböztetését (pl. különböző színnel vagy indexszel), akkor megfigyelhető, hogy a beszúrásos rendezés valóban megőrzi-e az azonos értékű elemek eredeti relatív sorrendjét.

Gyakran Ismételt Kérdések a Beszúrásos Rendezésről

Mi a beszúrásos rendezés alapelve?

Az alapelv az, hogy az adathalmazt két részre osztjuk: egy már rendezett és egy rendezetlen részre. A rendezetlen részből egyesével kivesszük az elemeket, és beillesztjük őket a rendezett rész megfelelő helyére, miközben fenntartjuk a rendezett rész rendjét. Ezt a kártyapakli analógiával lehet a legkönnyebben elképzelni.

Milyen esetekben hatékony a beszúrásos rendezés?

A beszúrásos rendezés különösen hatékony kis adathalmazok rendezésekor, valamint olyan esetekben, amikor az adatok már majdnem rendezett állapotban vannak. Ekkor az időkomplexitása közelít az O(n)-hez.

Miért számít stabilnak a beszúrásos rendezés?

A beszúrásos rendezés stabil, mert az azonos értékű elemek relatív sorrendjét megőrzi. Amikor egy kulcsot beillesztünk, csak akkor toljuk jobbra a már rendezett részbeli elemet, ha az szigorúan nagyobb, mint a kulcs. Ha egyenlő, a kulcsot az egyenlő elem után illesztjük be, így az eredeti sorrend megmarad.

Mekkora a beszúrásos rendezés idő- és térkomplexitása?

Az időkomplexitása legjobb esetben O(n) (már rendezett tömb esetén), átlagos és legrosszabb esetben pedig O(n²). A térkomplexitása O(1), mivel egy helyben rendező algoritmus, ami minimális extra memóriát igényel.

Practise it, don't just read it

40 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