You are on page 1of 3

10.

Rendezsi mdszerek, Quicksort


Rendezs kzvetlen kivlasztssal A mdszer lnyege: A rendezend szmok legyenek az A vektor elemei. Az els menetben kivlasztjuk a vektor legkisebb elemt gy, hogy az A(1)-et sszehasonltjuk A(2)... A(N) mindegyikvel. Ha A(1)-nl kisebb elemet tallunk, felcserljk ket, vagyis ezt a kisebbet tesszk A(1)-be. gy a menet vgre A(1) biztosan a vektor legkisebb elemt tartalmazza majd. Az eljrst A(2)-vel folytatjuk, ezt hasonltjuk ssze az A(3), ..., A(N) elemekkel. s gy tovbb. N-1 lpsben a vektor rendezett lesz. Algoritmus: Eljrs Ciklus I=1-tl N-1-ig Ciklus J=I+1-tl N-ig Ha A(J)<A(I) akkor A:=A(J) ; A(J):=A(I) ; A(I):=A Ciklus vge Ciklus vge Eljrs vge. Rendezs minimum kivlasztssal A mdszer lnyege: A felesleges cserk kikszblse rdekben kt segdvltozt vezetnk be. Az RTK tartalmazza az adott menetben legkisebb szmot, az INDEX pedig annak lelhelyt a vektorban. Algoritmus: Eljrs Ciklus I=1-tl N-1-ig INDEX:=I ; RTK:=A(I) Ciklus J=I+1-tl N-ig Ha RTK>A(J) akkor RTK:=A(J) ; INDEX:=J Ciklus vge A(INDEX):=A(I) ; A(I):=RTK Ciklus vge Eljrs vge. Buborkos rendezs A buborkos rendezs alapgondolata a szomszdos elemek cserje. Az els menetben a rendez A vektor vgrl indulva minden elemet sszehasonltunk az eltte lvvel. Amennyiben rossz sorrendben vannak, felcserljk ket. Az els menet vgre a legkisebb elem biztosan a helyre kerl. Minden tovbbi menetben ismt a vektor vgrl indulunk, de egyre kevesebb hasonltsra van szksgnk, mert a vektor eleje fokozatosan rendezett vlik. Javtott Algoritmus: Algoritmus: Eljrs Ciklus I=2-tl N-ig Ciklus J=N-tl I-ig (-1-esvel) Ha A(J-1)>A(J) akkor A:=A(J-1) A(J-1):=A(J) A(J):=A Elgazs vge Ciklus vge Ciklus vge Eljrs vge. A Eljrs i:=n; While i>1 do begin cs:=0; for j:=1 to i-1 do begin if a[j]>a[j+1] then begin cs:=j; csere(a[j],a[j+1]) Eljrs vge

Egyszer beillesztses rendezs rendezst gy vgezzk, mintha krtyznnk, s keznkbe egyesvel vennnk fel az asztalrl a kiosztott lapokat. Az ppen felvett lapnak megkeressk a keznkben lv, mr rendezett sorozatban a helyt gy, hogy kzben a nla nagyobbakat egy hellyel elcssztatjuk, vgl beillesztjk a felvett lapot a neki megfelel helyre. N elem esetn a vgs sorrend kialaktshoz N-1 menetre van szksg. Eredeti: 1. menet utn: 2. menet utn: 3. menet utn: 64 56 8 8 56 8 42 64 8 42 56 64 42 42 56 64 5 5 5 5 12 12 12 12 16 16 16 16 40 40 40 40 3 3 3 3 31 31 31 31 47 47 47 47 22 22 22 22 24 24 24 24 33 33 33 33 7 7 7 7 46 46 46 46

4. menet utn: 5. menet utn: ........... 15. menet utn:

5 5 3

8 42 56 64 12 16 40 8 12 42 56 64 16 40 5 7

3 31 47 22 24 33 3 31 47 22 24 33

7 46 7 46

8 12 16 22 24 31 33 40 42 46 47 56 64 Javtott Algoritmus: Eljrs for i:=2 to n do begin j:=i-1; x:=a[i]; while (j>0) and (a[j]>x) do begin a[j+1]:=a[j]; j:=j-1; end; if j<>i-1 then a[j+1]:=x; Eljrs vge

Algoritmus: Eljrs Ciklus J=2-tl N-ig I:=J-1 ; A:=A(J) Ciklus amg I>0 s A<A(I) A(I+1):=A(I) ; I:=I-1 Ciklus vge A(I+1):=A Ciklus vge Eljrs vge.

Quicksort Igen gyors s hatkony rendezsrl van sz, amelynek alapja az, hogy egymstl tvol lv elemeket hasonltunk ssze egymssal, s szksg esetn felcserljk azokat. Vlasszuk ki az A vektor els elemt, s vegyk ki a vektorbl. A helye res marad. A vektor vgrl indulva keresnk egy ennl kisebb elemet. Ha tallunk, azt betesszk a felszabadult helyre. Most a lyuk ott keletkezik, ahonnan ezt az elemet kivettk. Ide a vektor elejrl keresnk egy, a kivlasztott elemnl nagyobb elemet. Ha tallunk, beillesztjk, ha nem, akkor oda ppen a kivlasztott elem illik. 64 64 64 __ 46 46 56 56 56 56 8 8 8 8 42 42 42 42 5 5 5 5 12 12 12 12 16 16 16 16 40 40 40 40 3 3 3 3 31 31 31 31 47 47 47 47 22 22 22 22 24 24 24 24 33 33 33 33 7 7 7 7 46 46 __ 64

A konkrt pldban nem sikerlt a vektort nem sikerlt kt rszre vgni, mert a 64 ppen a legnagyobb elem. A kvetkez lpsben a 46-ot emeljk ki a vektor elejrl, s htulrl haladva keressnk nla kisebb elemet, s gy tovbb. 46 46 46 46 46 46 __ 7 7 7 7 7 7 56 56 __ 33 33 33 33 8 8 8 8 8 8 8 42 42 42 42 42 42 42 5 5 5 5 5 5 5 12 12 12 12 12 12 12 16 16 16 16 16 16 16 40 40 40 40 40 40 40 3 3 3 3 3 3 3 31 31 31 31 31 31 31 47 47 47 47 __ 24 24 22 22 22 22 22 22 22 24 24 24 24 24 __ 46 33 33 33 __ 47 47 47 7 __ 56 56 56 56 56 64 64 64 64 64 64 64

A 46 most a vgleges helyre kerlt. Tle balra a nla kisebb, jobbra a nla nagyobb elemek helyezkednek el. Az eljrst az gy kettvgott vektor egyik rsznek elemeivel a fent lert mdon folytatjuk tovbb. Algoritmus: Eljrs Quick(AH, FH) Sztvlogat(AH, FH, E) Ha AH<E-1 akkor Quick(AH, E-1) Ha E+1<FH akkor Quck(E+1, FH) Eljrs vge A sztvlogat eljrs a vektor elemeit gy rendezi t, hogy az E-edik elem el kerlnek a nla kisebbek, mg pedig a nagyobbak.

Teljes Algoritmus Eljrs gyorsrendezs (n, A) Eljrs rendez(also, felso) I:=also; J:=felso; X:=A[(also+felso) div 2]; {n elemszm, A - tmb} {az intervallumok szlei} {a kzps elem, div egsz oszts}

Ciklus Ciklus amg A[I]<x I:=I+1 ciklus vge {ellrl} Ciklus amg A[J]>x J:=J-1 ciklus vge {htulrl} Ha I<=J akkor csere(A[I];A[J]); I:=I+1; J:=J-1; Amg I>J Ha also<J akkor rendez(also,J); {addig ll fenn, amg a klnbsgk} Ha I<felso akkor rendez(I, felso); {legalbb 1. 1-hosszra mr nem hvjuk meg} Eljrs vge Begin End; Megjegyzsek: A kzps elem mindig ms, amg a kt hatr ssze nem r. Az algoritmus sebessge fgg az elemek rendezettsgtl Akkor a leglassabb, ha a kzps elem a legkisebb vagy a legnagyobb Akkor igazn gyors, ha nagy mret tmbbel dolgozik Nem ismeri fel, ha a tmb rendezett, de ekkor is gyors. A rekurzv jrahvs megtrtnik. A kis mret tmbkre azrt nem j, mert a rekurzi lasst Hibrid megolds: Ha a tmbmret lecskken mondjuk 100 elemre, akkor egy hagyomnyos rendez algoritmust hasznlunk. Tipp: a quicksort algoritmus lefutsa eltt egyszeren ellenrizhetjk, hogy a tmb neme rendezett mr. Rendez(1,N); {a fprogram}

You might also like