Сортировка слиянием используя MPI - C#

Узнай цену своей работы

Формулировка задачи:

Прошу помощи - есть код на C# сортировка одномерного массива методом слияния (merge sort). Необходимо переписать его используя MPI, как это сделать?
 static int[] Sort(int[] arraySort)
        {
            //проверка длины массива
            //если длина равна 1, то возвращаем массив, 
            //так как он не нуждается в сортировке
            if (arraySort.Length > 1)
            {
                     //массивы для хранения половинок входящего буфера
                int[] left = new int[arraySort.Length / 2];
                //для проверки ошибки некорректного разбиения массива,
                //в случае если длина непарное число
                int[] right = new int[arraySort.Length - left.Length];
 
                //заполнение субмассивов данными из входящего массива
                for (int i = 0; i < left.Length; i++)
                {
                    left[i] = arraySort[i];
                }
                for (int i = 0; i < right.Length; i++)
                {
                    right[i] = arraySort[left.Length + i];
                }
                //если длина субмассивов больше еденици,
                //то мы повторно (рекурсивно) вызываем функцию разбиения массива
                if (left.Length > 1)
                    left = Sort(left);
                if (right.Length > 1)
                    right = Sort(right);
                //сортировка слиянием половинок
                arraySort = MergeSort(left, right);
            }
            //возврат отсортированного массива
            return arraySort;
        }
 
        static int[] MergeSort(int[] left, int[] right)
        {
            //буфер для отсортированного массива
            int[] arraySort = new int[left.Length + right.Length];
            //счетчики длины трех массивов
            int i = 0;  //соединенный массив
            int l = 0;  //левый массив
            int r = 0;  //правый массив
                        //сортировка сравнением элементов
            for (; i < arraySort.Length; i++)
            {
                //если правая часть уже использована, дальнейшее движение происходит только в левой
                //проверка на выход правого массива за пределы
                if (r >= right.Length)
                {
                    arraySort[i] = left[l];
                    l++;
                }
                //проверка на выход за пределы левого массива
                //и сравнение текущих значений обоих массивов
                else if (l < left.Length && left[l] < right[r])
                {
                    arraySort[i] = left[l];
                    l++;
                }
                //если текущее значение правой части больше
                else
                {
                    arraySort[i] = right[r];
                    r++;
                }
            }
            //возврат отсортированного массива
            return arraySort;
        }

Решение задачи: «Сортировка слиянием используя MPI»

textual
Листинг программы
 using (new MPI.Environment(ref args))
                {
                    Intracommunicator comm = Communicator.world;
                    ProcNum = comm.Size; 
                    ProcRank = comm.Rank;
                    if (ProcRank == 0)
                    {
                        for (i = 0; i < array.Length; i++)
                        {
                            array[i] = rand.Next(10000);
                            arraySort[i] = array[i];
                            // Console.WriteLine(array[i]);
                        }
                    }
                    Console.WriteLine("Сортировка масива..");
                    if (array.Length > 1) arraySort = Sort(arraySort);
                }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.4 из 5
Похожие ответы