Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2017, 18:50   #1
Uncontrol21
Новичок
Джуниор
 
Регистрация: 20.05.2017
Сообщений: 2
По умолчанию Нужна помощь в переводе кода с CИ на C#

двухпутевое слияния
1)Исходная последовательность разбивается на две подпоследовательности:
2)Эти две подпоследовательности объединяются в одну, содержащую упорядоченные пары.
3)Полученная последовательность снова разбивается на две, и пары объединяются в упорядоченные четверки:
4)Данная операция повторяется до тех пор, пока полученная упорядоченная последовательность не будет иметь такой же размер, как у сортируемой.
Код:
Код:
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;
}
Здесь используются указатели, а я не знаю, что делать с ними , c# на них ругается, помогите в переводе кода на шарп

Последний раз редактировалось Uncontrol21; 20.05.2017 в 18:57.
Uncontrol21 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь в исправлении кода #С serzmerz Помощь студентам 5 14.11.2013 04:05
Нужна помощь в переводе скрипта на C# stationfuk C# (си шарп) 0 09.11.2013 23:06
Ошибка в переводе кода Waqq Помощь студентам 1 07.11.2011 08:20
Ошибка в переводе кода с Turbo Pascal на Fortran abit-2010 Помощь студентам 0 05.07.2011 22:55
Очень нужна помощь в переводе символов в ASCII и обратно !!!~VivO~!!! Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 05.05.2008 10:47