Перевод псевдокода на C ++

0

Мне тяжело переводить этот псевдокод в C++. Цель состоит в том, чтобы генерировать случайные числа в [] и сортировать их с помощью сортировки вставки, а затем получить время выполнения в миллисекундах. Сортировка вставки будет выполняться в течение m = 5 раз. Каждое значение n должно быть 100, 200, 300,...., 1000. Так, например, если n = 100, то это будет выполняться 5 раз с 5 различными наборами случайных чисел, тогда сделайте то же самое для n = 200 и т.д....

Я уже написал свою сортировку вставки, и это работает, поэтому я не включил ее. У меня действительно есть проблема с переводом этого псевдокода во что-то, с чем я могу работать. Я включил свою попытку и псевдокод, чтобы вы могли сравнить.

псевдокод:

main()
//generate elements using rand()
for i=1 to 5
   for j=1 to 1000
      A[i,j] = rand()

//insertion sort
for (i=1; i<=5; i=i+1)
   for (n=100; n<=1000; n=n+100)
      B[1..n] = A[i,n]
      t1 = time()
      insertionSort(B,n)
      t2 = time()
      t_insort[i,n] = t2-t1

 //compute the avg time
 for (n=100; n<=1000; n=n+100)
    avgt_insort[n] = (t_insort[1,n]+t_insort[2,n]+t_insort[3,n]+...+t_insort[5,n]+)/5
 //plot graph with avgt_insort

Это моя попытка:

Я смущен t_insort и avgt_insort, я не писал их в C++. Я делаю это в новых массивах? Также возьмите, я не уверен, правильно ли я выполняю свое время. Я новичок в этой работе, поэтому я еще никогда не писал ее в код.

#include <iostream>
#include <stdlib.h>
#include <time.h>

int main()
{   
int A[100];
for(int i=1; i<=5; i++)
{
    for(int j=1; j<=1000; j++)
    {
        A[i,j] = rand();
    }
}

for(int i=0;i<=5; i++)
{
    for(int n=100; n<=1000; n=n+100)
    {
        static int *B = new int[n];
        B[n] = A[i,n];
        cout << "\nLength\t: " << n << '\n';
        long int t1 = clock();
        insertionSort(B, n);
        long int t2 = clock();

                    //t_insort 

        cout << "Insertion Sort\t: " << (t2 - t1) << " ms.\n";
    }
}
for(int n=100; n<=1000; n=n+100)
{
    //avt_insort[n]
}
return 0;
}
Теги:
algorithm
sorting

2 ответа

1
Лучший ответ

Псевдокод относительно близок к коду C++ с некоторыми синтаксическими изменениями. Обратите внимание, что этот C++ код является прямым "переводом". Лучшим решением будет использование контейнеров из стандартной библиотеки C++.

int main()
{
  int A[6][1001], B[1001]; //C++ starts indexing from 0
  double t_insort[6][1000]; //should be of return type of time(), so maybe not double
  int i,j,n;
for( i=1;i<=5;i++)     //in C++ it is more common to start from 0 for(i=0;i<5;i++)
   for(j=1;j<=1000;j++)
      A[i][j] = rand();  //one has to include appropriate header file with rand()
                         //or to define his/her own function
for (i=1; i<=5; i++)
  for (n=100; n<=1000; n=n+100)
  {
    B[n]=A[i][n];
    t1 = time(); //one has firstly to declare t1 to be return type of time() function
    insertionSort(B,n); //also this function has to be defined before
    t2=time();
    t_insort[i][n]=t2-t1; //this may be necessary to change depending on exact return type of time()
  }
}

for (n=100; n<=1000; n=n+100)
  for(i=1;i<=5;i++)
    avgt_insort[n] += t_insort[i][n]

avgt_insort[n]/=5;
 //plot graph with avgt_insort
  • 0
    Так что я должен определить время () как функцию? Почему часы () не работают?
  • 0
    Вам не нужно определять свою собственную функцию, часы или что-то еще может работать, но сначала вам нужно включить соответствующий заголовочный файл с объявлением функций.
Показать ещё 1 комментарий
1

A[i,j] совпадает с A[j] (comma operator!) И не будет работать.

Возможно, вы захотите объявить двумерный массив для A или даже лучше подходящий std::array:

int A[100][1000];

std::array<std::array<int,1000>, 100> A; // <- prefer this for c++

Также выделение B сразу внутри цикла for выглядит неправильно:

static int *B = new int[n];

а также

B[n] = A[i,n];

не будет работать так, как вы намереваетесь (см. выше!).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню