Napisałem programy do szukania czasu działania sortowań i nie rozumiem dlaczego te czasy ZAWSZE są te same dla dowolnego N. np dla N=1000 przy pięciu próbach czas wynosi tyle samo. jak to poprawić?
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
public class ZmienneGlobalne
{
public static int licznik = 0;
public static int przestawienie = 0;
}
class sortuj
{
public void mergesort(int l, int p, int[] a, int[] b)
{
int lewa, prawa, v = Convert.ToInt32((l + p + 1) / 2), i;
if (v > l + 1) mergesort(l, v - 1, a, b);
if (v < p) mergesort(v, p, a, b);
lewa = l; prawa = v;
for (i = l; i <= p; i++)
{
if ((lewa == v) || ((prawa <= p) && (b[lewa] > b[prawa])))
{
a[i] = b[prawa]; prawa++; ZmienneGlobalne.przestawienie++;
}
else
{
a[i] = b[lewa]; lewa++; ZmienneGlobalne.przestawienie++;
}
ZmienneGlobalne.licznik++;
}
for (i = l; i <= p; i++)
{
b[i] = a[i];
ZmienneGlobalne.przestawienie++;
}
}
}
class Program
{
static void Main(string[] args)
{
int n, k;
Console.WriteLine("podaj n ");
n = int.Parse(Console.ReadLine());
int[] a = new int[n + 1];
int[] b = new int[n + 1];
Random los = new Random();
for (k = 1; k <= n; k++) a[k] = 0;
for (k = 1; k <= n; k++) b[k] = los.Next(999);
for (k = 1; k <= n; k++) Console.Write("{0}{1}", b[k], "\t");
Console.WriteLine(); Console.WriteLine();
sortuj s = new sortuj();
DateTime czas = DateTime.Now;
s.mergesort(1, n, a, b);
DateTime czas1 = DateTime.Now;
TimeSpan roznica = czas1 - czas;
for (k = 1; k <= n; k++) Console.Write("{0}{1}", b[k], "\t");
Console.WriteLine();
Console.WriteLine("Czas wykonania: {0} uderzen.", roznica.Ticks);
Console.WriteLine("Czas wykonania: {0}ms.", roznica.Milliseconds);
Console.WriteLine("Liczba przestawien: {0}", ZmienneGlobalne.przestawienie);
Console.WriteLine("Liczba porownan: {0}", ZmienneGlobalne.licznik);
Console.ReadLine();
}
}
}