2017. december 15., péntek

2017.12.15. Rendezések / Buborék rendezés

Rövidesen ezt együtt átvesszük. Addig is aki ügyes akar lenni a Kódolás Óráján, nézze át.



namespace buborekRendezes
{
    class sajatOsztaly
    {
        const int n = 10;
        public int[] szamok = new int[n];

        public void tombFeltoltes()
        {
            Random rnd = new Random();
            for (int i = 0; i < n; i++)
            {
                szamok[i] = rnd.Next(100);
            }
        }

        public void kiiro()
        {
            Console.BackgroundColor = ConsoleColor.DarkBlue;
            Console.ForegroundColor = ConsoleColor.White;
            Console.Clear();
            Console.WriteLine("A tömb elemei: ");
            Console.WriteLine();
            for (int i = 0; i < n; i++)
            {
                Console.WriteLine("     {0}. elem: {1,10}", i + 1, szamok[i]);
                Console.WriteLine("     ~~~~~~~~~~~~~~~~~~~~");
            }

        }
        //Rendezés:
        //Állítsunk be egy logikai változót (voltCsere)
        //igazra! Ez figyeli, hogy volt-e csere
        //a vizsgálat során. Indítsuk el a páronkénti
        //vizsgálatot (szomszédos elemek) a tömb végétől
        //visszafelé az 1-es indexű elemig! A voltCsere-t
        //állítsuk hamisra! Ha a nagyobb indexű elem értéke
        //kisebb, akkor a kapcsolót igazra állítjuk
        //és kicseréljük a két elemet. A páronkénti
        //vizsgálatok végén vizsgáljuk meg, hogy volt-e csere.
        //Ha volt, akkor indítsuk el újra a vizsgálatot!
        //Növeljük az alsó határt 1-gyel (mostmár ne
        //az 1-es indexűig menjünk, hanem a 2-esig).
        //Addig ismételjük az 1-4 lépést, amíg a kapcsoló hamis lesz.
        //Tesztelés után változtastunk annyit,hogy a
        //cserét beágyazott, paraméteres metódushívással oldjuk meg.
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.BackgroundColor = ConsoleColor.DarkBlue;
            Console.ForegroundColor = ConsoleColor.White;
            Console.Clear();
            Console.Title = "Buborék rendezés";
            sajatOsztaly s = new sajatOsztaly();
            s.tombFeltoltes();
            s.kiiro();
            Console.WriteLine("Buborék rendezés következik.");
            Console.ReadLine();
            s.buborekRendezes();
            s.kiiro();
            Console.ReadLine();
        }
    }
}


MEGOLDÁS:


    public void csere(int elso, int masodik)
    {
        int c = szamok[elso];
        szamok[elso] = szamok[masodik];
        szamok[masodik] = c;
    }

    public void buborekRendezes()
    {
        //int c = 0; //ez addig kellett, míg nem volt csere metódus
        bool voltCsere = true;
        int elso = 0;
        while (voltCsere)
        {
            voltCsere = false;
            int i = n - 1;
            while (i > elso)
            {
                if (szamok[i] < szamok[i - 1])
                {
                    csere(i - 1, i);
                    //c = szamok[i];   //ez addig kellett, míg nem volt csere metódus
                    //szamok[i] = szamok[i-1] ;
                    //szamok[i-1] = c;
                    voltCsere = true;
                }
                i--;
            }
            elso++;
        }
    }