Сортировка слиянием используя 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);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д