błędny czas działania programu

0

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();
        }
    }
}

0

nie mierz w milisekundach, tylko co najmniej w mikrosekundach (klasa StopWatch), albo wykonaj sortowanie w pętli (np. 1000 iteracji). DateTime ma za słabą rozdzielczość.
poza tym jak przyjrzysz się uważniej algorytmowi mergesort, to zobaczysz, że wykonuje dokładnie tyle samo operacji niezaleznie od zawartości tablicy, którą sortuje. to nie to, co np. quicksort.

1 użytkowników online, w tym zalogowanych: 0, gości: 1