Diskuze: Triediaca analýza
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

					Tvůrce				
			
Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Nemá cenu vybírat vhodný algoritmus pro 100 prvků. Použij normálně ten co je implementovany v .NETu.
Btw, ani jeden ze tvých algoritmů bych rozhodně nepoužil. Insertion sort je jednoduše pomalý a na counting sort je to velký rozsah čísel. V dnešní době se používa QuickSort. Popřípadě jestli máš pole, které má velikost v řádek desítek a není uvnitř jazyku už nějaký uvnitř, tak si rychle naimplementuješ bubble sort.
Array.Sort, použiť nemôžem, pretože tie čísla ťahám zo
string poľa, kde sa jeden string skladá z 9 charov, ktoré rozdelím na 3
časti, naparsujem do int a sčítam. Následne s tým číslom pracujem.
Inak prečo práve Bubble, veď Insertion je rýchlejší než Bubble.
V jaké části toho celého procesu to pole sortuješ?
Príklad.:
pole[0] = "000051255";
...
string prvok = pole[0];
string memory = "";
int sucet = 0;
//tá 000 proste vyhodí 0, 051 - 51, 255 - 255
memory += prvok[0];
memory += prvok[1];
memory += prvok[2];
sucet += int.Parse(memory);
memory = "";
memory += prvok[3];
memory += prvok[4];
memory += prvok[5];
sucet += int.Parse(memory);
memory = "";
memory += prvok[6];
memory += prvok[7];
memory += prvok[8];
sucet += int.Parse(memory);
memory = "";Ten kód hore, je funkcia pomocou ktorej, vytvorím v potrebný okamžik súčet tých troch čísel. A teda - triedim pole stringov, na základe súčtu troch čísel nachádzajúcich sa v danom stringu.
No jasně, ale v jaké části to sortuješ?
Jinak pár připomínek k tomu kódu.
Máš string, který se skládá z 9 číslic. Ty rozdělíš po 3 číslicích a ty sečteš. Kdybych se bavil o výkonu, tak tam vytváříš snad 10 instancí úplně zbytečně, protože string je immutable.
int soucet = int.Parse(pole.Substring(0, 3)) + int.Parse(pole.Substring(3, 3)) + int.Parse(pole.Substring(6, 3));Máš pravdu, ale bol to len príklad. V skutočnosti som to do programu
ešte neimplementoval, ale každopádne dobrá pripomienka.:)
Inak prečo ten Bubble?
Z hlediska efektivity programování ho máš napsaný za pár minut. A při
třídění 100 prvků je to celkem jedno, proto  Jinak co má být výsledkem? Ty
jednotlivé součty máš, které si vypočítal?
 Jinak co má být výsledkem? Ty
jednotlivé součty máš, které si vypočítal?
Robím tohto machra: http://www.itnetwork.cz/…198e32c9c602. To zotriedenie použijem na zotriedenie palety (poľa) farieb podľa sýtosti (tmavosti). Malo by platiť - čim menší súčet, tým tmavšia farba (čierná - 0,0,0).
Vytvoříš si normálně třídu, která reprezentuje ty 3 barvy. A pak máš několik možností, jak rozsortovat nějakou kolekci. Já osobně bych použil implementaci IComparable. Viz kód níže.
public sealed class Color : IComparable<Color>
{
    public int R { get; private set; }
    public int G { get; private set; }
    public int B { get; private set; }
    internal int Value
    {
        get { return this.R + this.G + this.B; }
    }
    public Color() : this(0, 0, 0) { }
    public Color(int r, int g, int b)
    {
        this.R = r;
        this.G = g;
        this.B = b;
    }
    public int CompareTo(Color other)
    {
        int value = Value;
        int otherValue = other.Value;
        if (value > otherValue)
            return 1;
        else if (value < otherValue)
            return -1;
        else
            return 0;
    }
}Použití
Color[] colors = new Color[]
{
    new Color(0,100,200),
    new Color(200,100,200),
    new Color(200,200,200),
    new Color(100,100,100),
    new Color(0,0,0),
    new Color(200,200,0)
};
for (int i = 0; i < colors.Length; i++)
    Debug.Write(colors[i].Value + " ");
Debug.WriteLine(null);
Array.Sort(colors);
for (int i = 0; i < colors.Length; i++)
    Debug.Write(colors[i].Value + " ");
Debug.WriteLine(null); 
						Mal som to už ako pole Stringov, tým pádom som to poriešil takto:
public string[] ZoradFarby()
{
    string[] poleColor = new string[poleFarieb.Length];
    Array.Copy(poleFarieb, poleColor, poleFarieb.Length);
    string temp;
    for (int i = 0; i < poleColor.Length; i++)
    {
        for (int j = i; j < poleColor.Length; j++)
        {
            if (int.Parse(poleColor[j].Substring (0, 3)) + int.Parse(poleColor[j].Substring(3, 3)) + int.Parse(poleColor[j].Substring(6,3)) < int.Parse(poleColor[i].Substring (0, 3)) + int.Parse(poleColor[i].Substring(3, 3)) + int.Parse(poleColor[i].Substring(6,3)))
            {
                temp = poleColor[j];
                poleColor[j] = poleColor[i];
                poleColor[i] = temp;
            }
        }
    }
    return poleColor;
}Tvoje riešenie je však z programátorského hľadiska určite lepšie. Diki
Np 
David Hartinger Podle čeho se určuje jestli dostanu bod nebo ne? 
Zobrazeno 12 zpráv z 12.
 
				