dobrý podvečer.
před nedávnem jsem narazil na tento algoritmus a tak jsem si říkal, že bych si ho napsal v C#, bohužel mi to moc nejde. myslím, že princip chápu, ovšem syntaxe je špatná (neumím to napsat), ptž program prostě nefunguje. přidávám sem radši hlavní části kódu, byl bych rád, kdyby jste mi poradili, kde dělám chybu (nemusíte psát kód, stačí slovně). díky.
třída, kde by se mělo vše setřídit:
class Trideni
{
int[] pole;
int[] pole2;
public Trideni(int delka)
{
pole = new int[delka];
pole2 = new int[delka];
}
public void NaplnPole(int hodnota, int index)//metoda pro naplnění pole
{
pole[index] = hodnota;
}
public int VypisPole(int index)//pro výpis hodnot jednotlivých indexů pole
{
return pole[index];
}
public void Setrid(int pocatek, int delka)//metoda pro setřídění
{
if (delka == 1)
{
return;
}
else if (delka == 2)//pokud jsou čísla ve "špatném" pořadí, prohodím
{
if (pole[pocatek] > pole[pocatek + 1])
{
int help = pole[pocatek];
pole[pocatek] = pole[pocatek + 1];
pole[pocatek + 1] = help;
}
}
else//pokud délka pole > 2, tak rozdělím na 1/2 a znova volám tuto metodu
{
int pocatek1 = pocatek;
int delka1 = delka / 2;
int pocatek2 = pocatek1 + delka1;
int delka2 = delka - delka1;
Setrid(pocatek1, delka1);
Setrid(pocatek2, delka2);
Spoj(pocatek1, delka1, pocatek2, delka2);
}
}
public void Spoj(int pocatek1, int delka1, int pocatek2, int delka2)//spojuji dva již setříděné úseky
{
int k = pocatek1;
int l = pocatek2;
int vyber = 0;
while (k < delka1 || l < delka2)
{
if (k >= delka1)
{
vyber = 2;
}
else if (l >= delka2)
{
vyber = 1;
}
else
{
if (pole[k] < pole[l])
{
vyber = 1;
}
else
{
vyber = 2;
}
}
if (vyber == 1)
{
pole2[k + l] = pole[k];
k++;
}
else
{
pole2[k + l] = pole[l];
l++;
}
for (int i = 0; i < pole2.Length; i++)
{
pole[i] = pole2[i];
}
}
}
}
metoda Main:
Console.Write("Zadej delku pole: ");
int delka = Convert.ToInt32(Console.ReadLine());
Trideni t = new Trideni(delka);
Random rnd = new Random();
for (int i = 0; i < delka; i++)
{
t.NaplnPole(rnd.Next(0, 101), i);
}
t.Setrid(0, delka);
for (int i = 0; i < delka; i++)
{
Console.Write(t.VypisPole(i) + ", ");
}