Hogyan lehet C#-ban tömböt ABC-re rendezni?
Olyan feladatot kapta, hogy egy tömbben lévő string adatokat (neveket) kell ABC sorrende rendeznem.
string[] t = { "Kati", "Mari", "Anna", "Feri" };
int n = t.Length;
int seged;
for (int k = n - 1; k >= 0; k--)
{
for (int b = 0; b <= k - 1; b++)
{
if (t[b].CompareTo(t[b+1]) > t[b + 1].CompareTo(t[b]))
{
seged = string.Compare(t[b],t[b+1]);
}
}
}
Idáig eljutottam és nem tudom az if-be mit kéne beirni vagy hogy teljesen rossz után járok ez ügyben. Mindent megpróbáltam de nem tudom a tömb elemeit ABC sorrendbe rakni. Azt tudom, hogy a ComaperTo-val kell de a formát nem ismerem és nem tanultuk.
Én mondjuk inkább a tömb sort() metódusát használnám
gyanítom nem 1 soros megoldást kértek
neveket hasonlíts össze Culture alapján a string.Compare() vel
using System.Linq;
string[] tomb = { "Kati", "Józsi", "Pista", ... };
var Rendezett = from Current in tomb orderby Current ascending select Current;
Legalább Microsoft .NET Framework 3.5 kell hozzá.
string[] t = { "Kati", "Mari", "Anna", "Feri" };
Array.Sort(t);
Gondolom ez egy iskolai feladat. A valóságban ez egy sorból állna és már le is írták, hogy a .Sort metódussal lehetne.
Viszont neked valószínűleg egy buborék rendezést kéne megvalósítani.
Itt egy megoldás:
Itt van szövegesen is, ha a kép elveszne:
static void Main()
{
string[] names = { "Kati", "Mari", "Anna", "Feri" };
Console.WriteLine("Rendezetlen tömb:");
foreach (var item in names)
{
Console.WriteLine(item);
}
string temporary;
for (int i = 0; i < names.Length; i++)
{
for (int j = 0; j < names.Length - 1; j++)
{
//A String.Compare(a, b) -1-et ad vissza, ha az "a" van előrébb az abc-ben
// 0-át ha egyenlő helyen vannak
// 1-et, ha a "b" van előrébb
if (String.Compare(names[j], names[j+1]) == 1)
{
temporary = names[j];
names[j] = names[j + 1];
names[j + 1] = temporary;
}
}
}
Console.WriteLine("Rendezett tömb:");
foreach (var item in names)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
}
Egyébként ha szebbé akarod tenni a megoldást:
A buborék rendezés jellegéből kifolyólag a belső ciklus első végigfutása után a betűrend szerinti utolsó elem a végére kerül. A második lefutás után a második leghátsó az utolsó előtti helyre, stb. Tehát igazából a belső függvénynek csak az első lefutásnál kéne a tömb teljes hosszán végigmennie (names.Length-1), utána elég lenne mindig egyel kevesebbszer. Tehát második lefutásnál már elég lenne a names.Length-2 is.
A külső ciklusnak meg elég lenne names.Length -1, nem is tudom miért nem úgy csináltam, de most már mindegy.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!