sprawdzanie czasu działania programu

0

Witam! Mam następujący kod

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int n, i;
            Console.Write("podaj ilosc elementow ");
            n = int.Parse(Console.ReadLine());
            int[] tablica = new int[n];
            Random los = new Random();
            //wpisanie danych do tablicy
            for (i = 0; i <= n - 1; i++)
                tablica[i] = los.Next();

            //sortowanie
            DateTime start = DateTime.Now;
            int pom, j;
            for (i = 0; i <= n - 2; i++)
            {
                for (j = 0; j <= n - i - 2; j++)
                {
                    if (tablica[j] > tablica[j + 1])
                    {
                        pom = tablica[j];
                        tablica[j] = tablica[j + 1];
                        tablica[j + 1] = pom;
                    }
                }
            }
            DateTime stop = DateTime.Now;
            TimeSpan roznica = stop - start;
            
            //wypisanie
            for (i = 0; i <= n - 1; i++)
            {
                Console.WriteLine("{0} {1}", tablica[i], "\t");
            }
            Console.WriteLine("Czas pracy:" + roznica.TotalMilliseconds);
            Console.ReadLine();
            
        }
    }
}

i nie wiem dlaczego dla dużego n powiedzmy 34000 program wypisuje liczby, których ja nigdy nie uznałbym za losowe :/ Mam zrobić projekt na programowanie który wypisze mi czas działania sortowań dla małej, średniej i dużej, uporządkowanej i nieuporządkowanej tablicy elementów. Czas się zgadza, bo jest to dla dużej próby ok 12 sek, natomiast te losowe wartości spędzają mi sen z powiek. czy tak ma być czy może ja popełniłem gdzieś błąd? Pozdrawiam!

0

To pytasz o mierzenie czasu czy o to czemu nie sa losowe?

Mierzenie czasu lepiej wychodzi na System.Diagnostic.Stopwatch. Co w tych wartosciach nie jest losowego? Oprocz tego, ze sa pseudolosowe? ;)

0

Pewno to, że po posortowaniu już nie są losowe, zwłaszcza, gdy widzi się tylko kilka ostatnich ;P

0

na przykład to że wszystkie mają taką samą ilość cyfr bądź podobną, program nigdy nie generuje np iczby 6589776 a później 23 tylko wszystkie obracają się wokół kilku tysięcy co dla mnie jest niezrozumiałe. co do mierzenia czasu dziękuję za pomoc wydaje mi się że zastosowany przeze mnie sposób faktycznie niezbyt się nadaje do tego

0

U mnie porusza sie w obszarze milionow. Generalnie zalozeniem losowosci jest, ze w zakresie generowanym - tutaj 0 - 2,147,483,647 - szansa na wylosowanie kazdej liczby jest taka sama. Liczb w zakresie 0-100 jest duzo mniej niz 100 tys. - 100 mln, stad te drugie beda duzo czesciej. W dokumentacji ladnie napisali, ze Random daje pewna statystyczna losowosc, czyli ze rozklad losowanych liczb bedzie raczej plaski niz np. normalny (w Twoim przypadku raczej Poissona bys chcial). To wszystko troche dywagacje, bo te liczby nie sa losowe, ale nie wiem jaki generator zastosowano w .NET.

0
jfix napisał(a)

na przykład to że wszystkie mają taką samą ilość cyfr bądź podobną, program nigdy nie generuje np iczby 6589776 a później 23 tylko wszystkie obracają się wokół kilku tysięcy co dla mnie jest niezrozumiałe.

To może zmień sposób losowania?
Najprościej tak:

for (i = 0; i <= n - 1; i++)
    tablica[i] = los.Next(n);

Wtedy liczby będziesz miał tylko z zakresu 0 - liczba podana przez użytkownika.
Albo tak:

if(i < n/2)
    tablica[i] = los.Next(0, 100);
else
    tablica[i] = los.Next(100, 100000);

Wtedy połowa liczb będzie z przedziału 0 - 100, a reszta z przedziału 100 - 100000.

Albo napisz własny generator ;)

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