Untitled
unknown
plain_text
2 years ago
3.3 kB
14
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();
}
}
}
Editor is loading...
Leave a Comment