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

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

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

Прошу помощи - есть код на C# сортировка одномерного массива методом слияния (merge sort). Необходимо переписать его используя MPI, как это сделать?
Листинг программы
  1. static int[] Sort(int[] arraySort)
  2. {
  3. //проверка длины массива
  4. //если длина равна 1, то возвращаем массив,
  5. //так как он не нуждается в сортировке
  6. if (arraySort.Length > 1)
  7. {
  8. //массивы для хранения половинок входящего буфера
  9. int[] left = new int[arraySort.Length / 2];
  10. //для проверки ошибки некорректного разбиения массива,
  11. //в случае если длина непарное число
  12. int[] right = new int[arraySort.Length - left.Length];
  13. //заполнение субмассивов данными из входящего массива
  14. for (int i = 0; i < left.Length; i++)
  15. {
  16. left[i] = arraySort[i];
  17. }
  18. for (int i = 0; i < right.Length; i++)
  19. {
  20. right[i] = arraySort[left.Length + i];
  21. }
  22. //если длина субмассивов больше еденици,
  23. //то мы повторно (рекурсивно) вызываем функцию разбиения массива
  24. if (left.Length > 1)
  25. left = Sort(left);
  26. if (right.Length > 1)
  27. right = Sort(right);
  28. //сортировка слиянием половинок
  29. arraySort = MergeSort(left, right);
  30. }
  31. //возврат отсортированного массива
  32. return arraySort;
  33. }
  34. static int[] MergeSort(int[] left, int[] right)
  35. {
  36. //буфер для отсортированного массива
  37. int[] arraySort = new int[left.Length + right.Length];
  38. //счетчики длины трех массивов
  39. int i = 0; //соединенный массив
  40. int l = 0; //левый массив
  41. int r = 0; //правый массив
  42. //сортировка сравнением элементов
  43. for (; i < arraySort.Length; i++)
  44. {
  45. //если правая часть уже использована, дальнейшее движение происходит только в левой
  46. //проверка на выход правого массива за пределы
  47. if (r >= right.Length)
  48. {
  49. arraySort[i] = left[l];
  50. l++;
  51. }
  52. //проверка на выход за пределы левого массива
  53. //и сравнение текущих значений обоих массивов
  54. else if (l < left.Length && left[l] < right[r])
  55. {
  56. arraySort[i] = left[l];
  57. l++;
  58. }
  59. //если текущее значение правой части больше
  60. else
  61. {
  62. arraySort[i] = right[r];
  63. r++;
  64. }
  65. }
  66. //возврат отсортированного массива
  67. return arraySort;
  68. }

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

textual
Листинг программы
  1.  using (new MPI.Environment(ref args))
  2.                 {
  3.                     Intracommunicator comm = Communicator.world;
  4.                     ProcNum = comm.Size;
  5.                     ProcRank = comm.Rank;
  6.                     if (ProcRank == 0)
  7.                     {
  8.                         for (i = 0; i < array.Length; i++)
  9.                         {
  10.                             array[i] = rand.Next(10000);
  11.                             arraySort[i] = array[i];
  12.                             // Console.WriteLine(array[i]);
  13.                         }
  14.                     }
  15.                     Console.WriteLine("Сортировка масива..");
  16.                     if (array.Length > 1) arraySort = Sort(arraySort);
  17.                 }

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


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

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

5   голосов , оценка 3.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы