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