» »

[C#]Urejanje po abecedi

[C#]Urejanje po abecedi

abyssus ::

Imam polje, v katerem je par besed. Rad bi jih uredil po abecedi.
Moja koda:

           for (int i = 0; i < stevec; i++)
            {
                for (int j = 0; j < polje[i].Length; j++)
                {
                    if ( (System.Convert.ToInt32(polje[i][j])) > (System.Convert.ToInt32(polje[i+1][j])) )
                    {
                        string temp = polje[i];
                        polje[i] = polje[i + 1];
                        polje[i + 1] = temp;
                    }
                }
            }


Moja ideja:
Najprej bi besede uredil po prvi črki, potem po drugi črki in tako naprej. Ampak dobim napako IndexWasOutOfRange. Lahko kdo malce pomaga? :)

gendale ::

najprej si poglej na wikipedii algoritme za urejanje:

Sorting algorithm @ Wikipedia (najenostavnejši za napisat je bubble sort, je pa tud v večini primerov neoptimalen)

pol si pa poglej še kako primerjaš stringe:

http://msdn.microsoft.com/en-us/library...
seznam zanč moderatorjev in razlogov da so zanč
http://pastebin.com/QiWny5dV
gor je mavrik apple uporabniček (mali možgani in mali penis)

abyssus ::

1. Kot vidiš sem uporabil bubble sort
2. To z primerjanjem stringov mi ni jasno niti malo. :S

OK, mi je uspelo naredit. :)

Zgodovina sprememb…

  • spremenilo: abyssus ()

joze67 ::

Kar si povedal in kar si skodiral ni isto.

Kot prvo, v C# bo vsak uporabil kak Array.Sort()

No, če pa že hočeš zavihati rokave (kar ni slabo), pa:
Tvoja notranja ("j") zanka vsakič, ko je izpolnjen pogoj, zamenja i-to i i+1 polje. npr polje[i]="bab" in polje[i+1]="aba". Ko je j=0, primerjaš 'b' (97) in 'a' (96) - mimogrede, C# zna primerjati tudi znaka sama in ni nobene potrebe po pretvarjanju v int - in zamenjaš. Sedaj je v polju "aba" pred "bab", j=1 in glej! spet primerjaš 'b' in 'a' in spet zamenjaš. Spet je kot na začetku "bab" na i-tem mestu in "aba" za njim, j pa je sedaj 2 in ah ne, spet primerjaš 'b' in 'a' in spet zamenjaš. Skratka, zmeda, katere verjetno nisi hotel.

Če pa je i-ti niz daljši od naslednjega, boš hotel "manjkajoče" znake vseeno prebrati in boš dobil to, kar si dobil.

Prav bi ti pa delalo, če bi notranjo for zanko preprosto pozabil, if pa zapisal if(polje[i]>polje[i+1]) {...}. Pa še potem ti bo šlo vse po zlu, če je stevec število elementov v polju - ker boš pri zadnjem spet primerjal z neobstoječim naslednjim.

abyssus ::

Ja, sem ugotovil ter zadevo popravil. Sem pa pozneje tudi našel Array.Sort(). Nisem vedel, da to obstaja.
Hvala za odgovore. :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Programski jezik C- pomoč

Oddelek: Programiranje
61571 (1489) alexa-lol
»

[C#] pomoc pri vpisu elementov v listBox

Oddelek: Programiranje
101184 (1099) keworkian
»

[c++] bubblesort

Oddelek: Programiranje
293052 (3052) strictom
»

C++ Sortiranje

Oddelek: Programiranje
81060 (1015) CCfly
»

Bubble sort

Oddelek: Programiranje
71458 (1350) OwcA

Več podobnih tem