Egydimenziós tömbök
Deklarálás: var valtozónév:array[kezdőérték..végsőérték]of típus; type típusnév = array [kezdőérték..végsőérték] of típus; var valtozónév: típusnév; Beolvasás: {n – elemek száma X – a vektorunk neve} write(‘n=‘); readln(n); for i:=1 to n do begin write(‘x[‘,I,’]=‘); readln(x[i]); end; Kiírás: writeln(‘n=‘,n); for i:=1 to n do write(x[i],’ ‘); writeln;
Elemi algoritmusok vektorokkal 1. Keresések –1.1. Lineáris (szekvenciális) –1.2. Bináris 2. Rendezések –2.1. Buborékos –2.2. Minimumkereséses –2.3. Beszúrásos 3. Elem törlése 4. Elem beszúrása 5. Összefésülés
1.1. Lineáris (vagy szekvenciális) keresés Feladat: Adott egy n elemű, egész számokat tartalmazó x sorozat és egy k elem. Határozzuk meg, hogy a k elem benne van-e az x sorozatban! A lineáris keresés lényege, hogy végigjárjuk az x sorozatot és minden x[i] elemet összehasonlítunk a k-val. Az algoritmusnak két esetben van vége: Ha x[i]=k, vagyis megtaláltuk a keresett elemet. Ha i=n+1, vagyis végigjártuk a sorozatot és nem találtuk meg a keresett k elemet.
Vegyünk egy példát: n=7, x=(5, 6, 9, 13, 45, 3, 15) és k=13, majd k= x[1]x[2]x[3]x[4]x[5]x[6]x[7] Megtaláltuk a keresett számot! Tehát nem szükséges továbbmenni. 17 A vektor végére értünk anélkül, hogy megtaláltuk volna a keresett számot. Tehát nincsen meg.
A lineáris keresés algoritmusa Algoritmus linearis_kereses Be: n; x i,ahol i:=1,n; k megvan hamis i 1 Amíg (i<=n) és nem megvan végezd el Ha x[i]=k akkor megvan igaz (Ha) vége i i+1 (Amíg)vége Ha megvan akkor Ki: ‘benne van’ különben Ki: ‘nincsen benne’ (Ha)vége Algoritmus vége Kezdetben feltételezzük, h nincsen meg amit keresünk. A keresést az első elemtől kezdjük. Keressük amíg a végére érünk......vagy megta- láltuk. Ha megtaláltuk... „Megyünk” a következő elemhez. Kiírjuk a megoldást.
1.2. Bináris keresés Ugyanaz a feladat: Adott egy n elemű, egész számokat tartalmazó x sorozat és egy k elem. Határozzuk meg, hogy a k elem benne vane az x sorozatban! A bináris keresés lényege, hogy a k elemet az x sorozatot középső eleméhez hasonlítjuk és a hasonlítás eredményétől függően folytatjuk a keresést középtől balra, vagy jobbra. Ez az algoritmus, CSAK rendezett sorozat esetén alkalmazható!
7=7 tehát MEGTALÁLTUK a keresett elemünket. Vegyünk egy példát: n=13, x=(1,3,4,5,7,9,10,11,15,16,16,18,20) és k=7 X[1]X[2]X[3]X[4]X[5]X[6]X[7]X[8]X[9]X[10]X[11]X[12]X[13] <10 és a sorozat rendezett, tehát csak az első felében lehet, ha benne van egyáltalán... 7>5 és a sorozat rendezett, tehát csak tőle jobbra lehet... ha benne van egyáltalán... 1/2 7 Megkeressük a középső elemet és ahhoz hasonlítjuk A keresett k számot. Most az első 7 elemnek keressük a középsőjét. A 4-dik elem előtt, illetve a 7-dik után már biztosan nincs, keressük tehát a 4-7 elemek „közepén”. Ha a keresett elem nem lenne meg a sorozatban, akkor addig feleznénk a vektorunkat, míg az „elfogyna”.
A bináris keresés algoritmusa Algoritmus Binaris_kereses Be: n; x i,ahol i:=1,n; k bal 1; jobb n megvan hamis Amíg (bal<=jobb) és nem megvan végezd el kozep (jobb+bal) div 2 Ha x[kozep]=k akkor megvan igaz különben Ha k<x[kozep] akkor jobb kozep-1 különben bal kozep+1 (Ha) vége (Amíg)vége Ki: megvan Algoritmus vége Kezdetben az egész vektor hosszát osztjuk. Feltételezzük, hogy az elem nincsen meg. Két esetben van vége az algoritmusnak: 1. „elfogyott” a vektorunk Megtaláltuk az elemet Osztom az aktuális intervallumot. Ha megtaláltam az elemet, akkor átállítom a megvan értékét, h az amíg tudjon leállni. Ha még nem találtam meg az elemet, akkor továbbosztom az intervallumot, attól függően, hogy...