Kezdőoldal » Számítástechnika » Programozás » Két tömb összefésülése?

Két tömb összefésülése?

Figyelt kérdés

Sziasztok!

Tegnap elkezdtem írni egy programot aminek a feladata az lenne, hogy összefésüli két tömb elemeit. Nos, ebben elakadtam. Tudnátok esetleg segíteni? Lehet hogy kiszúrja a szemem a hiba, de nem veszem észre.


[link]



2016. nov. 14. 15:26
1 2 3 4
 21/33 A kérdező kommentje:
Bár nem írtam le, de a két tömb feltöltésénél feltétel volt az is, hogy ne legyen egy tömbön belül egynél több azonos szám. Ezáltal az unióban is csak egyszer szerepel egy adott szám.
2016. nov. 15. 14:59
 22/33 A kérdező kommentje:

Esetleg egy quicksortban tudnátok segíteni? Nézelődtem sok helyen a kódok között, de valahogy nem találtam olyat amit megértenék. Egy jól átlátható és megérthető kódot keresek.

Egészen pontosan ezt néztem, de nem teljesen értem például hogy mi a 'jobb' és a 'bal'.

[link]

2016. nov. 15. 15:12
 23/33 anonim ***** válasza:

A Quicksort hű a nevéhez, ugyanis általánosságban egy igen gyors rendezőalgoritmusról beszélünk, igazából általános célra ez tekinthető az egyik leggyorsabbnak. A működése a következőképp zajlik:

A quicksort rekurzív, tehát a futása során többször meghívja saját magát.

Az eljárás megkap egy bal és egy jobb indexet (az első híváskor ez a rendezni való tömb első, és utolsó elemének indexe). Ezután kiválaszt egy ún. pivot elemet a bal és jobb index által határolt intervallumon, jelen esetben ez a bal és jobb index között középen levő elem. Az algoritmus innentől a következőképpen zajlik. Elindít a bal indextől egy változót jobbra, amit addig léptet, amíg az adott indexen levő érték nem lesz nagyobb vagy egyenlő a pivot elemmel. Eztán elindít jobboldalról is egy változót, amit addig léptet, amíg nem lesz az adott indexen levő elem kisebb, mint a pivot elem. Tehát megtalálja az első elemet balról, ami nagyobb, mint a középső elem, és az elsőt jobbról, ami kisebb. Ha ez megvan, kicseréli a két elemet, és lépteti tovább a változókat, amíg nem találnak ismét egy-egy nagyobb illetve kisebb elemet. Addig megy ez, amíg a két változó össze nem ér. Ezután elmondhatjuk, hogy a pivot elem baloldalán csak nála kisebb elemek vannak, a jobb oldalán pedig csak nála nagyobbak. A pivot elem tehát már a megfelelő helyen van, és a két oldalán keletkezik két "al-tömb", amik még nincsenek sorba rendezve, de kizárólag a pivotnál nagyobb, illetve kisebb elemeket tartalmazzák Ezen a ponton kétszer újrahívja önmagát a quicksort, egyszer úgy, hogy bal és jobb paraméterül a jelenlegi bal indexet, és a jobbról balra futtatott változó pozicióját adja be (tehát az intervallum a pivottól balra eső rész lesz), és egyszer úgy, hogy a jobb indexet, és a balról futtatott változó pozicióját adja be (ez pedig a pivottól jobbra eső rész lesz), és a fenti algoritmus alapján azokat is rendezi, és egész addig újrahívja magát egyre szűkebb intervallumokon, amíg össze nem ér a bal és jobboldala, és akkor a teljes tömb rendezve lesz.


A legtöbb quicksort algoritmus amit találok egy kicsit eltérően működik, ott a pivotelem az egyik szélső elem, és nem kétoldalról futtatja a változókat, hanem egy irányba jár végig, de a lényegi működése ugyanaz kb.

Itt egy interaktív példa az utóbbira, elég szemléletes:

[link]

2016. nov. 15. 18:00
Hasznos számodra ez a válasz?
 24/33 A kérdező kommentje:
Nagyjából értem. Most pedig megpróbálok nekifutni egy kódnak is. Igaz már tegnap próbálgattam, de most hátha tovább jutok. :)
2016. nov. 15. 18:30
 25/33 A kérdező kommentje:
Lehet hülye kérdés lesz, de egy szakmabeli fejből összedob egy quicksortot mondjuk, vagy csak megérti ha látja/tudja alkalmazni? Mert ha magamat nézem, igaz én csak tanulom a dolgot.. De ha meg is értem, nem hinném hogy fejből menne a kódja ha felébresztenének hajnali négykor hogy mondjam el.
2016. nov. 15. 18:40
 26/33 anonim ***** válasza:

A szakmabeli tudja kb hogy működik a Quicksort, de igazából fölösleges pontról pontra ismerni, mert

1. Elég ritkán kell neki leimplementálnia, mivel jóformán minden nyelvben talál beépített rendezéseket, amik már amúgyis szarrá vannak optimalizálva

2. Ha netalántán mégis meg kell írni, akkor fél perc alatt meg tudja nézni a pontos algoritmust, nem kell fejből írnia.

2016. nov. 15. 19:06
Hasznos számodra ez a válasz?
 27/33 A kérdező kommentje:
Ez esetben nem értem hogy mi értelme van az elméleti órákon nekünk fejből fújni ezeket. (mármint a kódot) Ha gyakorlatban nem tudok valamit, akkor pedig rákeresek.
2016. nov. 15. 19:14
 28/33 anonim ***** válasza:
Azért, hogy megértsd a működését, megtanuld hogyan kell algoritmust írni és értelmezni.
2016. nov. 15. 19:34
Hasznos számodra ez a válasz?
 29/33 A kérdező kommentje:

Rendben, ez így is van. De akkor miért azt osztályozza az adott tanár hogy te fejből megtanultad ezeket az algoritmusokat, amik már alapból be vannak rakva az értelmesebb nyelvekbe? (A Pascal oktatásáról pedig ne is beszéljünk) Véleményem szerint semmi értelme nincs így osztályozni, mivel gyakorlatban nem ez lesz. Arról nem is beszélve, hogy szerintem programot írni nem úgy kezdünk el, hogy kiadják a munkát és már nyomjuk befelé a kódot. Sokkal inkább szépen kigondolod hogy hogy is kellene hogy kinézzen a dolog, majd odaülsz és megvalósítod azt.

Nem tudom.. Lehet én gondolom rosszul, de szerintem sok értelmetlen dolog van az informatika oktatásban is.

2016. nov. 15. 19:41
 30/33 anonim ***** válasza:
Mit osztályoznál, ha nem ezt?
2016. nov. 15. 19:49
Hasznos számodra ez a válasz?
1 2 3 4

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!