示例#1
0
        static void Main()
        {
            int[,] Indexes;
            Console.Write("Введите размер массива: ");
            n = Convert.ToInt32(Console.ReadLine());
            Console.Write("Введите количество потоков: ");
            p = Convert.ToInt32(Console.ReadLine());
            int sp = 1;

            Console.WriteLine("Введите спрособ заполнения массива: 1 - рандомное заполнение (по умолчанию), 2 - неравномерное заполнение");
            sp = Convert.ToInt32(Console.ReadLine());
            if (sp == 2)
            {
                mas = MAS1();
            }
            if (sp == 1)
            {
                mas = MAS();
            }
            //foreach (var item in mas)
            //{
            //    Console.WriteLine(item);
            //}
            Indexes = PartIdexes();
            sm.Start();
            MyPart[] Parts = new MyPart[p]; //массив потоков
            for (int i = 0; i < p; i++)
            {
                int[] mp = new int[Indexes[i, 1] - Indexes[i, 0] + 1];
                int   u  = 0;
                for (int j = Indexes[i, 0]; j <= Indexes[i, 1]; j++)
                {
                    mp[u] = mas[j];
                    u++;
                }
                Console.WriteLine("В потоке №" + i + " обрабатывается " + mp.Length + " элементов");
                Parts[i] = new MyPart(mp, i);
                mp       = null;
            }
            foreach (var item in Parts)
            {
                item.Thrd.Join();
            }
            int[] SMas = new int[n];
            SMas = SortMas(Parts);
            sm.Stop();
            //Console.WriteLine("Выводим отсортированный массив:");
            //foreach (var item in SMas)
            //{
            //    Console.WriteLine(item);
            //}
            long time = sm.ElapsedMilliseconds;

            Console.WriteLine("Время затраченное на сортировку массива (в миллисекундах): " + time);
            Console.ReadLine();
        }
示例#2
0
        static void Main()
        {
            int[,] Indexes;
            Console.Write("Введите размер массива: ");
            n = Convert.ToInt32(Console.ReadLine());
            Console.Write("Введите количество потоков: ");
            p = Convert.ToInt32(Console.ReadLine());
            int sp = 1;

            Console.WriteLine("Введите спрособ заполнения массива: 1 - рандомное заполнение (по умолчанию), 2 - неравномерное заполнение");
            sp = Convert.ToInt32(Console.ReadLine());
            if (sp == 2)
            {
                mas = MAS1();
            }
            if (sp == 1)
            {
                mas = MAS();
            }
            int max = mas.Max <int>(), min = mas.Min <int>();

            //foreach (var item in mas)
            //{
            //    Console.WriteLine(item);
            //}
            Indexes = PartIdexes(min, max);
            sm.Start();
            MyPart[]   Parts = new MyPart[p]; //массив потоков
            List <int> mp    = new List <int>();

            for (int i = 0; i < p - 1; i++)
            {
                for (int j = 0; j < mas.Length; j++)
                {
                    if ((mas[j] >= Indexes[i, 0]) && (mas[j] < Indexes[i, 1]))
                    {
                        mp.Add(mas[j]);
                    }
                }
                Console.WriteLine("В потоке №" + i + " обрабатывается " + mp.Count() + " элементов");
                Parts[i] = new MyPart(mp, i);

                mp.Clear();
            }
            for (int j = 0; j < mas.Length; j++)
            {
                if ((mas[j] >= Indexes[p - 1, 0]) && (mas[j] <= Indexes[p - 1, 1]))
                {
                    mp.Add(mas[j]);
                }
            }
            Console.WriteLine("В потоке №" + (p - 1) + " обрабатывается " + mp.Count() + " элементов");
            Parts[p - 1] = new MyPart(mp, p - 1);
            foreach (var item in Parts)
            {
                item.Thrd.Join();
            }
            List <int> SMas;

            SMas = SortMas(Parts);
            sm.Stop();
            //Console.WriteLine("Выводим отсортированный массив:");
            //foreach (var item in SMas)
            //{
            //    Console.WriteLine(item);
            //}
            long time = sm.ElapsedMilliseconds;

            Console.WriteLine("Время затраченное на сортировку массива (в миллисекундах): " + time);
            Console.ReadLine();
        }