20 lines
2.0 KiB
Plaintext
20 lines
2.0 KiB
Plaintext
|
Bináris keresés
|
||
|
A bináris - más néven logaritmikus vagy felező módszer - mivel n elem esetén log(n) futási idővel rendelkezik. A bináris keresés egy erősen optimalizált keresési eljárás, amely csak rendezett adatsoron alkalmazható. Például, amikor egy nyomtatott szótárban keresünk egy szót vagy jelenléti íven keressük a nevünket. A keresett értéket egy mintaadattal összehasonlítjuk és az eredménytől függően - amennyire lehet - egy nagy részt kizárunk a tartományból.
|
||
|
|
||
|
A módszer külön implementációt C# esetén nem igényel, mivel beépítetten az Array osztály és a List osztály is tartalmaz bináris keresést megvalósító metódust:
|
||
|
int ondex = Array.BinarySearch()
|
||
|
|
||
|
|
||
|
Buborékrendezés
|
||
|
Az algoritmus a nevét onnan kapta, hogy hasonlóan ahhoz, ahogy, a pezsgőpohárban szállnak felfelé a buboréknak, a rendezés során is minden egyes menetben a fennmaradó elemek közül a legnagyobbat "áramoltatjuk fel" a tömbszelet végére, tetejére.
|
||
|
|
||
|
A rendezés során a tömb a fennmaradó részén végighaladva az egymás utáni szomszédos elemeket összehasonlítjuk, és ha szükséges, megcseréljük őket, hogy közülük mindig a nagyobb helyezkedjen el feljebb. Ezt a műveletet aztán a tömbön feljebb lépve addig ismételjük, amíg a fennmaradó rész végéhez nem érünk. A műveletsor végén a rendezetlen rész tetejére mindig a legnagyobb érték kerül majd fel, amelyet a következő menetben már nem veszünk figyelembe. A ciklust egészen addig ismételjük, amíg meg nem találjuk a kívánt elemet.
|
||
|
|
||
|
CIKLUS i = 6-tól 1-ig
|
||
|
CIKLUS j = 0-tól i-1-ig
|
||
|
HA a[j] > a[j+1] AKKOR
|
||
|
csere a[j] a[j+1]
|
||
|
|
||
|
Az algoritmus futási ideje javítható, ha megfigyeljük, hogy a külső ciklusnak csak akkor érdemes tovább futnia, ha a belső cuklusban volt csere. Erre bevezethetunk egy logikai változót.
|
||
|
|
||
|
A javított algoritmus futási ideje legjobb esetben lináris lesz, legrosszabb esetben pedig négyzetes.
|