Nadesłany przez Krzysztof Sobol, 13 czerwca 2013 19:28
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
mergesort.cs:
//Sortowanie przez scalanie (mergesort)
//www.algorytm.org
class Program
{
const int N = 100; //rozmiar tablicy do posortowania
static int[] tablica = new int[N]; //tablica do posortowania
static int[] tab = new int[N]; //tablica pomocnicza
/// <summary>
/// Scalanie tablic:
/// pierwsza tablica ma indeksy od "pocz" do ("pocz" + "kon") / 2
/// druga tablica ma indeksy od (("pocz" + "kon") / 2) + 1 do "kon"
/// </summary>
/// <param name="pocz">poczatek pierwszej tablicy</param>
/// <param name="kon">koniec drugiej tablicy</param>
static void scalanie(int pocz, int kon)
{
//Skopiuj wartosci do tablicy pomocniczej
for (int i = pocz; i <= kon; i++)
{
tab[i] = tablica[i];
}
//Scalaj tablice
int p = pocz;
int q = (pocz + kon) / 2 + 1;
int r = pocz;
while (p <= (pocz + kon) / 2 && q <= kon)
{
if (tab[p] < tab[q])
{
tablica[r] = tab[p];
r++;
p++;
}
else
{
tablica[r] = tab[q];
r++;
q++;
}
}
//Przepisz koncowke
while (p <= (pocz + kon) / 2)
{
tablica[r] = tab[p];
r++;
p++;
}
}
/// <summary>
/// Sortowanie przez scalanie (mergesort)
/// </summary>
/// <param name="pocz">indeks poczatkowy tablicy do sortowania</param>
/// <param name="kon">indeks koncowy tablicy do sortowania</param>
static void sortowanie(int pocz, int kon)
{
if (pocz < kon)
{
//podziel sortowana tablice na pol
sortowanie(pocz, (pocz + kon) / 2);
sortowanie((pocz + kon) / 2 + 1, kon);
//scal posortowane tablice
scalanie(pocz, kon);
}
}
/// <summary>
/// Program
/// </summary>
static void Main()
{
//Wypelnij tablice losowymi wartosciami
Random r = new Random();
for (int i = 0; i < N; i++)
{
tablica[i] = r.Next(1001);
}
//Wypisz nie posortowana tablice
for (int i = 0; i < N; i++)
{
Console.Write("{0} ", tablica[i]);
}
//Sortuj tablice uzywajac sortowania przez scalanie (mergesort)
sortowanie(0, N - 1);
//Wypisz posortowana tablice
Console.WriteLine("\n");
for (int i = 0; i < N; i++)
{
Console.Write("{0} ", tablica[i]);
}
Console.ReadLine();
}
}

