Библиотека mpich

216
12 декабря 2021, 00:10

такая проблема, есть программа, которая реализуется сортировку методом двухпутевого слияния, нужно при помощи библиотеки mpich реализовать данный алгоритм параллельно.

                    #include <stdio.h>
                #include <stdlib.h>
                // Функция сортировки двухпутевым слиянием
                void merge(int *a, int n)
                {
                  int mid = n / 2; // находим середину сортируемой последовательности
                  if (n % 2 == 1)
                    mid++;
                  int h = 1; // шаг
                  // выделяем память под формируемую последовательность
                  int *c = (int*)malloc(n * sizeof(int));
                  int step;
                  while (h < n) 
                  {
                    step = h;
                    int i = 0;   // индекс первого пути
                    int j = mid; // индекс второго пути
                    int k = 0;   // индекс элемента в результирующей последовательности
                    while (step <= mid) 
                    {
                      while ((i < step) && (j < n) && (j < (mid + step))) 
                      { // пока не дошли до конца пути
                        // заполняем следующий элемент формируемой последовательности
                        // меньшим из двух просматриваемых
                        if (a[i] < a[j])  
                        {
                          c[k] = a[i];
                          i++; k++;
                        }
                        else {
                          c[k] = a[j];
                          j++; k++;
                        }
                      }
                      while (i < step) 
                      { // переписываем оставшиеся элементы первого пути (если второй кончился раньше)
                        c[k] = a[i];
                        i++; k++;
                      }
                      while ((j < (mid + step)) && (j<n)) 
                      {  // переписываем оставшиеся элементы второго пути (если первый кончился раньше)
                        c[k] = a[j];
                        j++; k++;
                      }
                      step = step + h; // переходим к следующему этапу
                    }
                    h = h * 2;
                    // Переносим упорядоченную последовательность (промежуточный вариант) в исходный массив
                    for (i = 0; i<n; i++)
                      a[i] = c[i];
                  }
                }
                int main() 
                {
                  int a[8];
                  // Заполнение массива случайными числами
                  for (int i = 0; i<8; i++)
                    a[i] = rand() % 20 - 10;
                  // Вывод элементов массива до сортировки
                  for (int i = 0; i<8; i++)
                    printf("%d ", a[i]);
                  printf("\n");
                  merge(a, 8); // вызов функции сортировки
                  // Вывод элементов массива после сортировки
                  for (int i = 0; i<8; i++)
                    printf("%d ", a[i]);
                  printf("\n");
                  getchar();
                  return 0;
                }

Я не понимаю и не знаю, как это сделать, в интернете подобной информации найти не выходит=( Спасибо за внимание.

READ ALSO
Инициализация поля класса указателем С++

Инициализация поля класса указателем С++

Как можно организовать передачу указателя в поле класса так, чтобы в дальнейшем можно было его использовать для модификации переданного...

122
Не выводит текст в файл

Не выводит текст в файл

Когда я нажимаю на кнопку считает, а в файл нечего не записывается искал много способов записи в файл, ругался на все кроме этогоcli c++

245
C++ Вывод только положительного результата

C++ Вывод только положительного результата

Всем привет! Подскажите нужно создать матрицу такого вида: 4 - размер матрицы;

268
использование random в массивах С++

использование random в массивах С++

Как из массива данных типа char вывести случайные пары элементов, чтобы те не повторялись? Уже сделал работающую программу для вывода этих...

129