Rendezés probléma C-ben

 ( eriktoth | 2012. október 13., szombat - 14:29 )

Üdv! Olyan gondom van, hogy a terminálra beírt karakterek gyakoriságát kell kiíratnom c-ben, ez még megy is. viszont a feladat tovabbi részében gyakoriság szerint kell rendeznem a karaktereket itt akadtam el, két megoldas jut eszembe a rendezésre:

elso:

http://pastebin.com/Q1s2Lj1j

Masodik:

http://pastebin.com/w9yqXRqr

Ilyen kimenetet kéne kapnom pl.:

108 'l': 10
97 'a': 8
121 'y': 6

Előre is köszönöm a válaszokat, már vagy két hete itt vagyok elakadva

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Hasznalj stukturat amiben benne van a karakter erteke is + qsort

g

qsortot tilos használnunk :(

Akkor innen válogathatsz.

Javaslat: Elkészíted a folyamatábrát, majd az alapján lekódolod. Így könnyebb elkerülni a hibákat.

-----
A kockás zakók és a mellészabások tekintetében kérdezze meg úri szabóját.

Akkor a buborek rendezes.

In soviet Russia, bubble sorts YOU!

http://www.youtube.com/watch?v=lyZQPjUT5B4

--
trey @ gépház

Kiraly, koszi. :)

Szóval ez a probléma. Neked kell írni rendezést?
Nem hatékony, de a legprimitívebb házi feladathoz: buborék rendezés.
http://hu.wikipedia.org/wiki/Bubor%C3%A9krendez%C3%A9s

És hogy hogyan?

unsigned char Counter[256]; // ezed van már, nullázott vektor
unsigned char Charlist[256]; // 0..255 -ig feltölteni

A Counter-t buborékrendezed, vele együtt a Charlist-ben is megcsinálod a cseréket.

Strukturaval azert meg is csak egyszerubb lenne.

Szerintem tökmindegy - ilyen feladatnál.
De meggyőzhető vagyok. Kérlek mellékeld a két kódrészletet a cserékről struktúra és dupla vektor esetére, aztán kivesézzük, mennyivel bonyolultabb.

Ha két tömbben tárolsz összetartozó értékeket, akkor amikor rendezed az egyik tömböt, az első alapján rendezned kell a másikat is. Persze a gyakorlatban ez a legtöbb rendezési algoritmusban +1 sort jelent a kódban, de ez pont elég ahhoz, hogy pl. a könyvtári qsort-ot már ne használhasd (persze eltekintve attól, hogy azt most amúgy sem lehet). Könnyen előfordulhat, hogy egy programhiba következtében a két tömb egymáshoz tartozó adatai "elszakadnak" egymástól, és ezért a program kimenete szinte biztos, hogy hibás lesz.
Ha struktúrát építesz az egymáshoz tartozó adatokból, akkor elég egy tömböt tárolni. Vagyis használhatod az összes tömbön értelmezett algoritmust úgy, hogy nem léphet fel inkonzisztens állapot, mert az egymáshoz tartozó adatok mindig egymás mellett maradnak.

+1

gabor2: Hogy elegánsabb, az nem kérdés. De miért egyszerűbb a fenti házi feladat esetén?

Nem akarlak meggyozni. :)

+1

Továbbá a teljesség kedvéért megjegyezném, hogy a memóriában fizikailag egymáshoz közel lévő adatokat sokszor hatékonyabban lehet kezelni. (azonos bázis címhez képest lehet indexelni, jobb az esélye, hogy összetartozó adatok bent vannak a cache -ben, stb...).

subscribe

Első megoldás:
Ha az „a” tömböt akarod rendezni, akkor előtte töltsd fel valamivel. Vagy ne az „a” tömböt rendezd.

-----
A kockás zakók és a mellészabások tekintetében kérdezze meg úri szabóját.

nem kell rendezés. a kis méretek miatt nem is erőszakoljuk meg a hatékonyságot...
ha a két hét komoly akkor, gondold át hogy neked erre valóban szükséged van-e.
http://ideone.com/iyYH7

Hazifeladatmegoldo Unatkozok Portalja.

--
My gold plated butt-plug business is being sued by Apple.
Apparently they have a patent for overpriced crap for arseholes.

az a 2 perc nem fog a padlóra küldeni senkit. :)
meg ha tényleg 2 hete szenved ezzel a végén még öngyilkos lesz, vagy ami rosszabb
elkezd valami egyetemen lövöldözni, embert rabolni.. stb :(

Vagy ami a legrosszabb, lediplomázik, ehe.

Ok, jogos, ne haljanak meg emiatt emberek!

Eddig volt egy ilyen bevett gyakorlat hupon, hogy nem oldunk meg hazit (csak segitunk benne).

--
My gold plated butt-plug business is being sued by Apple.
Apparently they have a patent for overpriced crap for arseholes.

Ok, akkor levettem a láthatóságát és mea culpa. Bár nem sokat módosítottam az ő kódján, ami inkább az (explicit) rendezés nélküli megoldás felé hajlott (egyszerűbb nyelvileg,"algoritmikusan" és kódként is)

Többször kiderült már, hogy amúgy triviális feladatokra is van többféle megoldás, néha egészen zseniálisak is. Pláne hogy ami az egyik nyelven szenvedés, az a másik nyelven esetleg alap, szóval az ilyen kérdések akár hasznosak is lehetnek.

Karakterek, vagy byte-ok? Ha C-rol van szo (es a Unicode-ot hanyagoljuk), akkor van belole max. 256 fele, ladarendezessel letudhato egy pillanat alatt. gyk: felveszel egy 256-os tombot, kinullazod, utana olvasod a byte-okat, es ha pl. 'A' jott, akkor a tombod 'A'-ik elemet noveled 1-el.
Innentol a kiiratas trivialis. Ha gyakorisag szerint kell rendezned a kimenetet, akkor a 256 meretu tombbel egy kb. hatsoros buborekrendezes is egy pillanat alatt vegez.

--
My gold plated butt-plug business is being sued by Apple.
Apparently they have a patent for overpriced crap for arseholes.

Köszönöm szépen az ötleteket, erre volt szükségem :)