1

Тема: Допоможіть розібратися з часом роботи частини коду

Пробую створити масив, в якому елементами буде час, тобто кожний елемент - це час, за який відсортовано 2 елемента

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;


namespace ConsoleApplication52
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = Convert.ToInt32(Console.ReadLine());
            int i = 0;
            int[] A = new int[a];
            double[] time = new double[a];
            Random r = new Random();
            for (i = 0; i < a; i++)
            {
                A[i] = r.Next(0, 100);
                Console.WriteLine("A[i]=" + " " + A[i]);
            }
            Stopwatch sw1 = new Stopwatch();

            int t = 0;
            int i1 = 0;
            for (i = 2; i < a; i = i + 2)
            {
                sw1.Start();
                for (i = 0; i < a; i++)
                {
                    for (int j = 0; j < a; j++)
                    {
                        if (A[i] < A[j])
                        {
                            t = A[j];
                            A[j] = A[i];
                            A[i] = t;
                        }
                    }
                }
                sw1.Stop();
                time[i1] = sw1.ElapsedMilliseconds;
                sw1.Restart();
                i1++;
                
            }
                for (i = 0; i < a; i++)
                {
                    Console.WriteLine("Масив відсортований:" + " " + A[i]);
                }
                Console.WriteLine("time:" + " " + time[i1]);
                Console.WriteLine("Час сортування методом бульбашки:" + " " + sw1.ElapsedMilliseconds);
            }           
        }
    }

Час сортування показує правильно, а от масив time чомусь 0

2

Re: Допоможіть розібратися з часом роботи частини коду

Чому дорівнює i1 в рядку 51?

3

Re: Допоможіть розібратися з часом роботи частини коду

якщо в рядку 53, то я хотів вивести масив елементів, але він =0. в 51 рядку вивожу відсортовані елементи

4

Re: Допоможіть розібратися з часом роботи частини коду

Так, вибачте, в 53-му.
І масив - це багато значень. В вашому випадку - time. А 0 - це одне значення, time[i1]. Тепер розумієте? Порівняйте, як ви A виводите, а як time.

5

Re: Допоможіть розібратися з часом роботи частини коду

Я трохи затупив і не поставив

sw1.Stop();
time[i1] = sw1.ElapsedMilliseconds;
sw1.Restart();
i1++;

в цикл, тому в мене ш1 завжди було рівне 0.
Я зробив по прикладу, як я виводив масив А, але тепер в мене видає помилку: поза межами масива, не можу зрозуміти чому

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;


namespace ConsoleApplication52
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = Convert.ToInt32(Console.ReadLine());
            int i = 0;
            int[] A = new int[a];
            double[] time = new double[a];
            Random r = new Random();
            for (i = 0; i < a; i++)
            {
                A[i] = r.Next(0, 100);
                Console.WriteLine("A[i]=" + " " + A[i]);
            }
            Stopwatch sw1 = new Stopwatch();

            int t = 0;
            int i1 = 0;
            for (i = 2; i < a; i = i + 2)
            {
                sw1.Start();
                for (i = 0; i < a; i++)
                {
                    for (int j = 0; j < a; j++)
                    {
                        if (A[i] < A[j])
                        {
                            t = A[j];
                            A[j] = A[i];
                            A[i] = t;
                        }
                    }
                    sw1.Stop();
                    time[i1] = sw1.ElapsedMilliseconds;
                    sw1.Restart();
                    i1++;
                    
                }
                
            }
                for (i = 0; i < a; i++)
                {
                    Console.WriteLine("Масив відсортований:" + " " + A[i]);
                }
                for (i = 2; i < a; i=i+2)
                {
                    Console.WriteLine("time:" + " " + time[i1]);
                }

                Console.WriteLine("Час сортування методом бульбашки:" + " " + sw1.ElapsedMilliseconds);
            }           
        }
    }

6

Re: Допоможіть розібратися з часом роботи частини коду

Вибачаюсь, не ш1, а і1

7

Re: Допоможіть розібратися з часом роботи частини коду

А я, якщо чесно, не зовсім розумію, чому раніше цієї помилки не було... Але, у будь-якому разі,

            for (i = 0; i < a; ++i)
            {
                Console.WriteLine("time:" + " " + time[i]);
            }

хоча все одно, якщо ви працюєте не на спектрумі, будуть нулі.

8

Re: Допоможіть розібратися з часом роботи частини коду

В мене і виводяться нулі

9

Re: Допоможіть розібратися з часом роботи частини коду

Задача для 5 класу (або для 3-го з зірочкою): процесор може виконати 1 мільярд операцій на секунду (тобто, умовно, має частоту 1ГГц - це насправді некоректно, але для прикладу хай буде). На "сортування" (бо реально у вас там щось не те відбувається) іде по 10 операцій на елемент. Скільки елементів має бути в масиві, щоб "сортування" зайняло 1мс, тобто 1 тисячну секунди?

10

Re: Допоможіть розібратися з часом роботи частини коду

100 000

11

Re: Допоможіть розібратися з часом роботи частини коду

А ви яке a задаєте?

12

Re: Допоможіть розібратися з часом роботи частини коду

Я пробував задати і 100 000, все одно нулі

13

Re: Допоможіть розібратися з часом роботи частини коду

А який у вас процесор? Невже 1ГГц?