Untitled
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