Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Luvut taulukkoon ja järjestykseen (Dev-C++)

Just_Jack [26.03.2008 10:26:30]

#

Pitäis vääntää ohjelma, joka kysyy 20 kokonaislukua, järjestää ne taulukkoon suuruusjärjestykseen ja tulostaa ne. Ja pitäisi käyttää jtn bubble sort'ia.

Tällä hetkellä motivaatio ei riitä kysyisen ohjelman vääntöö ja miksi yleensä konetekniikanopiskelijat tälläistä taitoa edes tarvitsee? Olisin ikuisesti kiitollinen jos saisin hieman apuja.

Antti Laaksonen [26.03.2008 10:58:43]

#

Lukujen kysyminen ja tulostus hoituu for-silmukalla:

for (i = 0; i < 20; i++) {
    scanf("%i", &luvut[i]);
}
for (i = 0; i < 20; i++) {
    printf("%i", luvut[i]);
}

Näiden välissä luvut pitää enää järjestää. Tiedätkö, miten kuplalajittelu (bubble sort) toimii? Siinä n lukua sisältävä taulukko käydään läpi n kertaa ja joka kerralla tutkitaan, ovatko vierekkäiset luvut oikeassa järjestyksessä, ja jos eivät ole, ne vaihdetaan keskenään. Toteutukseen tarvitaan kaksi sisäkkäistä for-silmukkaa, ja lukujen vaihtoon keskenään tarvitaan apumuuttuja.

Sami [26.03.2008 16:14:13]

#

Eikä sitä apumuuttujaakaan välttämättä tarvitse lukujen vaihtamiseen keskenään, jos käyttää XOR-operaatiota:

int a = 17;
int b = 25;
a = a ^ b;
b = a ^ b;
a = a ^ b;
// nyt a = 25, b = 17

jlaire [26.03.2008 16:24:40]

#

Tai tiiviimmin:

a ^= b ^= a ^= b;

Wikipedia tosin sanoo, että "On modern (desktop) CPUs, the XOR technique is considerably slower than using a temporary variable to do swapping".

Antti Laaksonen [26.03.2008 16:32:33]

#

Ja tuollaisia juttuja ei välttämättä ole muutenkaan tarkoitus käyttää ohjelmoinnin alkeisharjoituksissa.

(Mutta saa niistä silti mielellään mainita, niin monentasoiset lukijat oppivat keskustelussa.)

Sami [26.03.2008 16:37:56]

#

Kuka sitä nyt nopeudesta puhui, kunhan totesin ettei siihen tarvitse apumuuttujaa. Ja välittääkö joku oikeasti nopeudesta jos on toteuttamassa bubblesortia? :)

Toisaalta jo ihan koodin siisteyden ja luettavuuden vuoksi tuo apumuuttuja taitaa olla yleensä parempi ratkaisu.

Antti Laaksonen [26.03.2008 16:41:42]

#

Sami kirjoitti:

Ja välittääkö joku oikeasti nopeudesta jos on toteuttamassa bubblesortia? :)

20 alkion järjestelyssä kuplalajittelu luultavasti voittaa esim. pikalajittelun.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta