Сбалансированное N-ленточное слияние

Отменен
Заказ
4609336
Раздел
Программирование
Предмет
C/C++
Тип работы
Антиплагиат
Не указан
Срок сдачи
26 Фев 2022 в 22:00
Цена
250 ₽
Блокировка
10 дней
Размещен
26 Фев 2022 в 12:04
Просмотров
112
Описание работы

Нужно дополнить код: написать программу, сортирующая массив из случайных char элементов n-ленточным слиянием + методом подсчёта,(делим наш большой массив на корень из его N ключевых элементов(char), проводим операцию метода подсчёта над ключевыми char) за этим char элементом как бы "хвостом" следуют int[] и char, они тоже случайные. Затем эти маленькие отсортированные ленты нужно соединить и получить отсортированный массив. (пример моей программы на всякий случай, оставлю прикрепленным)

Пользователь вводит лишь число строк, все остальные элементы заполняются сами random'ом

Например:

Input:

3

Output:

c 21 43 54 g

g 43 65 7 h

j 4 65 4 k


Пока что это выглядит так:

#include

#include

#include

#include

#include


struct S { int number; char stroka[20]; };


void sort(S str[4][20+1], int index)

{

  S resul[20];

  int i, j, k;

  //сортировка методом подсчета

  for (j = 0; j < 20; j++)

  {

    k = 0;

    for (i = 0; i < 20; i++)

    {

      if (str[index][j].number < str[index][i].number) { k++; }

    }

    resul[k] = str[index][j];

  }

  str[index][20].number = -1;

  for (k = 0; k < 20; k++)

  {

    str[index][k] = resul[k];

    printf("%4d -- %s\n", str[index][k].number, str[index][k].stroka);

  }

}


int main(void)

{

  setlocale(LC_ALL, "Russian");

  S str[4][20+1], result[80];


  int i, j;


  printf("        ----------------Первоначальные данные----------------\n");

  for (i = 0; i < 4; i++)

  {

    for (j = 0; j < 20; j++)

    {

      str[i][j].number = rand() % 10000;


      sprintf_s(str[i][j].stroka, "%s%s", "a", " b");

      printf("%4d -- %s\n", str[i][j].number, str[i][j].stroka);

    }

  }


  printf("\n\n");

  printf("        ----------------Отсортированные ленты----------------\n");

  for (i = 0; i < 4; i++) {


    sort(str, i);

    printf("\n");

  }

  printf("        ----------------Конечные данные----------------\n");


  int stroka1[4] = { 0,0,0,0 }, t = 0;

  while (t < 80)

  {

    int max = 0;

    for (i = 0; i < 4; i++)

    {

      if (str[i][stroka1[i]].number > str[max][stroka1[max]].number) { max = i; }

    }

    result[t] = str[max][stroka1[max]];

    stroka1[max]++;


    printf("\n%4d -- %s", result[t].number, result[t].stroka);

    t++;

  }

  return 0;

}

Нужна такая же работа?
  • Разместите заказ
  • Выберите исполнителя
  • Получите результат
Гарантия на работу 1 год
Средний балл 4.96
Стоимость Назначаете сами
Эксперт Выбираете сами
Уникальность работы от 70%
Нужна аналогичная работа?
Оформи быстрый заказ и узнай стоимость
Гарантированные бесплатные доработки
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Темы журнала
Показать ещё
Прямой эфир