4. C#

4.7. Seřazení prvků pole

Pro seřazení prvků pole vzestupně je v regionu Operace s polem, která je součástí regionu Pomocné metody, volána soukromá metoda bez návratu s názvem SeraditPole. Tato metoda využívá třídění typu Bubble Sort, kde jsou porovnány jednotlivé dvojice sousedních prvků. Pokud je aktuálně procházený prvek větší než následující prvek, jsou tyto prvky vzájemně prohozeny. Pokud došlo alespoň k jednomu prohození sousedních prvků, celý vnitřní cyklus s krokem pro procházení od prvního do předposledního prvku je znovu opakován. Pokud nedošlo k prohození ani v jedné porovnávané dvojici sousedních prvků není již vnější cyklus s podmínkou na konci prováděn. Následující zdrojový kód obsahuje deklarace metody SeraditPole - viz Kód 1.

/// <summary>
/// Metoda pro vzestupné třídění prvků ve vektoru
/// </summary>
/// <param name="n"> počet prvků vektoru </param>
/// <param name="pole"> výstupní seřazený vektor </param>
private void SeraditPole(int n, int[] pole)
{
    /* Lokální proměnné: i - index ;  pom - pomocná proměnná pro prohození 
     * dvou prvků vektoru; b - booleanovská proměnná - informace, zda
     * došlo k prohození dvou sousedních prvků */
    int pom;
    bool b;
 
    // Opakuj tak dlouho, dokud bude docházet k prohození prvků vektoru
    do
    {
        // Nedošlo k prohození prvků vektoru
        b = false;
        // Cyklus s pevným krokem - pro procházení od počátečního do předposledního prvku
        for (int i = 0; i < n - 1; i++)
        {
            /* Pokud je hodnota sousedícího prvku větší než hodnota aktuálně
             * testovaného prvku, pak... */
            if (pole[i] > pole[i + 1])
            {
                // Ulož hodnotu aktuálního prvku do pomocné proměnné
                pom = pole[i];
                // Ulož hodnotu sousedícího prvku do aktuálního prvku
                pole[i] = pole[i + 1];
                // Ulož hodnotu z pomocné proměnné do sousedícího prvku
                pole[i + 1] = pom;
                // Došlo k prohození prvků
                b = true;
            }
        }
    }
    // Podmínka cyklu
    while (b); 
}

Kód 1: Deklarace metody s návratem pro vzestupné seřazení prvků vektoru (SeraditPole)

Přemístíme se zpět do regionu Události a jeho části Operace s polem. V tomto regionu upravíme metodu obsluhy události stisknutí tlačítka BtnSeradit - viz Kód 2. V rámci těla metody budeme volat předchozí deklarovanou metodu SeraditPole, které předáme dva parametry. První parametr je počet prvků vektoru uložený v datové složce třídy. Jako druhý parametr předáme vektor. Vzhledem k tomu, že v metodě bude upraven vektor, je vhodné tento změněný vektor uživateli zobrazit. Proto vektor zobrazíme jak do objektu typu TextBox, tak i do objektu typu ListView umístěných na formuláři. 

/// <summary>
/// Volání metody pro vzestupné třídění prvků vektoru
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnSeradit_Click(object sender, RoutedEventArgs e)
{
    // Zavolání metody pro vzestupné třídění prvků v poli
    this.SeraditPole(this.pocetPrvku, this.pole);
    // Zavolání metody pro zobrazení vektoru do objektu (TextBox) na formuláři
    this.ZobrazitPoleJakoText(this.pocetPrvku, this.pole);
    // Zavolání metody pro zobrazení vektoru v objektu (ListView) na formuláři
    this.ZobrazitPoleVListView(this.pole);
}

Kód 2: Deklarace metody pro zavolání metody vzestupného třídění prvků vektoru - výpis na formuláři (BtnSeradit_Click)