Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
3.3 kB
9
Indexable
using System;
using System.Diagnostics;

namespace quicksortandramusage
{
    class Program
    {
        private static int maxpamiec = 0; //zmienna, która przechowuje max zajętość pamięci RAM
        private static int UzywanaPamiec()
        {
            return (int)Process.GetCurrentProcess().PrivateMemorySize64;
        }
        private static void QuickSort(int[] tab, int lewy, int prawy)
        {
            if (lewy < prawy)
            {
                int pivot = Dzielenie(tab, lewy, prawy); //ustawiamy pkt. odniesienia, dzielimy tablicę na dwie części
                int aktualnapamiec = UzywanaPamiec(); //sprawdzam aktualną zajętość pamięci i aktualizuję max
                if (aktualnapamiec > maxpamiec)
                {
                    maxpamiec = aktualnapamiec;
                }

                QuickSort(tab, lewy, pivot); //wywołujemy metodę dla liczb mniejszych od pivota, sortujemy lewą część tablicy
                QuickSort(tab, pivot + 1, prawy); //analogicznie wywołujemy metodę dla prawej części tablicy
            }
        }
        private static int Dzielenie(int[] tab, int lewy, int prawy) //zwraca indeks, na którym znajduje się ostateczny element mniejszy od pivota
        {
            int pivot = tab[lewy];
            int i = lewy;
            int j = prawy;

            while (true)
            {
                while (tab[i] < pivot) //szukamy el. tablicy mniejszego od pivota
                    i++;

                while (tab[j] > pivot) //szukamy el. tablicy większego od pivota
                    j--;

                if (i < j) //zamieniamy el. tablic miejscami, jeśli liczniki się nie wyminęły
                {
                    Zamiana(tab, i, j); 
                    i++;
                    j--;
                }
                else
                {
                    return j;
                }
            }
        }
        private static void Zamiana(int[] tab, int i, int j) //zamieniamy elementy tablic miejscami
        {
            int x = tab[i];
            tab[i] = tab[j];
            tab[j] = x;
        }
        static void Main(string[] args)
        {
            int[] tab = new int[] { 2, 5, 1, 3, 4, 0, 6, 2, 5 };
            Console.WriteLine("Tablica nieposortowana:");
            foreach (int x in tab)
            {
                Console.Write(" " + x);
            }
            Console.WriteLine();

            int poczatkowapamiec = UzywanaPamiec(); //początkowa zajętość pamięci

            QuickSort(tab, 0, tab.Length - 1); //wywołujemy metodę szybkiego sortowania

            int koncowapamiec = UzywanaPamiec(); //końcowa zajętość pamięci

            Console.WriteLine();
            Console.WriteLine("Tablica posortowana:");
            foreach (int x in tab)
            {
                Console.Write(" " + x);
            }
            Console.WriteLine("\nMaksymalna zajętość pamięci: " + maxpamiec);
            Console.WriteLine("Zajętość pamięci przed sortowaniem: " + poczatkowapamiec);
            Console.WriteLine("Zajętość pamięci po sortowaniu: " + koncowapamiec);
            Console.ReadLine();
        }
    }
}

Leave a Comment