【问题标题】:How to print running time of a case in c++ [duplicate]如何在c ++中打印案例的运行时间[重复]
【发布时间】:2014-09-10 11:44:13
【问题描述】:

我有一个包含 5 种排序算法(冒泡排序、选择排序等)的程序,用户被要求选择他想要使用的算法,然后被要求写出他想要排序的数字,这些数字是随机生成的,我的问题是如何打印每个案例完成的时间?

提前致谢

代码如下:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include<string>
#include <ctime>
#include <cstdlib>

using namespace std;

void merge(int[],int,int[],int,int[]);
void bubblemethod(int*,int);
void insertionmethod(int[],int);
void merge_sort(int[],int,int);
void mergemethod(int[],int,int,int);
void selectionmethod(int[],int,int);
int populateArray();

   int size;
   int*array;




int main(int argc, char** argv) {
    int menuOption;





    //int c2, n2;

 // printf("Ten random numbers in [1,100]\n");

  //for (c2 = 1; c2 <= 10; c2++) 
  //{
 //   n2 = rand()%100 + 1;
  //  printf("%d\n", n2);
  //}


    do

    {
    cout << endl << endl << "Select an option from the MENU:" << endl  ;
    cout << "1. Bubble Sort" << endl ;
    cout << "2. Insertion Sort" << endl ;
    cout << "3. Merge Sort" << endl  ;
    cout << "4. Selection Sort" << endl ;
    cout << "5. Quick Sort" << endl ;
    cout << "6. Exit the Program" << endl ;
    cin >> menuOption ;

        switch (menuOption)
        {
            case 1:

                size=populateArray();

                bubblemethod(array,size);



             break;

            case 2:

             size=populateArray();

                insertionmethod(array,size);


            break;
            /*
            case 3:
            cout <<  endl << "Enter the size of the list with integers:" << endl ;
            cin >> size;

            randomnum=size;

             cout<< endl <<"The random numbers in this size are:" << endl;

               for (c1 = 1; c1 <= size; c1++) 
                  {
                      n1 = rand()%size + 1;
                      printf("%d\n", n1);
                      array[c1-1]=n1;
                  }

                  merge_sort(array,c1,randomnum);

                   cout<<"So, the sorted list (using MERGE SORT) will be :"<<endl;
                   cout<<endl<<endl;

                   for(c1=1;c1<=randomnum;c1++)
                    cout<<array[c1-1]<<"    ";



            break;
            case 4:
                cout <<  endl << "Enter the size of the list with integers:" << endl ;
                cin>> size;

                randomnum=size;

                cout<< endl <<"The random numbers in this size are:" << endl;

               for (c1 = 1; c1 <= randomnum; c1++) 
                  {
                      n1 = rand()%size + 1;
                      printf("%d\n", n1);
                      array[c1-1]=n1;
                  }


                selectionmethod(array,c1,randomnum);

                break;
                case 5:

                break;
                case 6:
                cout << endl << "End the program" << endl  ;
                break;
                    */
            default:
                cout << endl << "Error in menu input. Valid menu options are 1 to 6." << endl  ;
        }// end switch


    }   while (menuOption !=6); // end do-while



}


void bubblemethod(int array[],int size)
            {
                int d,swap,c1;

            for (c1 = 0 ; c1 <size; c1++)
             {

                 for (d = 0 ; d < size - 1; d++)
                 {
                     if (array[d] > array[d+1]) /* For decreasing order use < */
                      {
                         swap   = array[d];
                         array[d]   = array[d+1];
                         array[d+1] = swap;
                      }
                 }
             }

            cout<< endl << "Sorted list:\n" << endl;


            for ( c1 = 0 ; c1 <size; c1++ )
            printf("%d\n", array[c1]);



            }

void insertionmethod(int array[],int size)
            {
                int d,t,c1;
                 for (c1 = 1 ; c1 <= size - 1; c1++) 
                 {
                   d = c1;

                   while ( d > 0 && array[d] < array[d-1]) 
                   {
                     t = array[d];
                     array[d]  = array[d-1];
                     array[d-1] = t;

                     d--;
                   }
                 }

                printf("Sorted list:\n");

                for (c1 = 0; c1 <= size - 1; c1++) 
                    printf("%d\n", array[c1]);

            }

            void merge_sort(int array[],int c1,int size)
              {
                  int mid;
                  if(c1<size)
                  {
                      mid=(c1+size)/2;
                      merge_sort(array,c1,mid);
                      merge_sort(array,mid+1,size);
                      mergemethod(array,c1,mid,size);
                  }
              } 

            void mergemethod(int array[],int c1,int mid,int randomnum)
            {
                int h,i,j,b[50],k;
                h=c1;
                i=c1;
                j=mid+1;

                while((h<=mid)&&(j<=randomnum))
                {
                   if(array[h]<=array[j])
                   {
                      b[i]=array[h];
                      h++;
                   }
                   else
                   {
                      b[i]=array[j];
                      j++;
                   }
                   i++;
                }
                if(h>mid)
                {
                   for(k=j;k<=randomnum;k++)
                   {
                      b[i]=array[k];
                      i++;
                   }
                }
                else
                {
                   for(k=h;k<=mid;k++)
                   {
                      b[i]=array[k];
                      i++;
                   }
                }
                for(k=c1;k<=randomnum;k++) 
                     array[k]=b[k];
            }



            void selectionmethod(int array[],int c1,int randomnum)
            {
                int position,d,swap;
                for ( c1 = 0 ; c1 < ( randomnum - 1 ) ; c1++ )
                {
                    position = c1;

                    for ( d = c1 + 1 ; d < randomnum ; d++ )
                    {
                         if ( array[position] > array[d] )
                         position = d;
                    }
                   if ( position != c1 )
                   {
                        swap = array[c1];
                        array[c1] = array[position];
                        array[position] = swap;
                   }
                }

                printf("Sorted list:\n");

                for ( c1 = 0 ; c1 < randomnum ; c1++ )
                printf("%d\n", array[c1]);
            }


int populateArray()
{
    int size;
cout <<  endl << "Enter the size of the list with integers:" << endl ;
                cin >> size;


                  int randomnum, c1, n1;

                 randomnum=size;
                 array=new int[size];

                  cout<< endl <<"The random numbers in this size are:" << endl;

               for (c1 = 1; c1 <= size; c1++) 
                  {
                      n1 = rand()%size + 1;
                      printf("%d\n", n1);
                      array[c1-1]=n1;
                  }

return size;    

}

【问题讨论】:

  • 使用 iostreams 库将代表您的时间的格式化字符串写入标准输出:std::cout &lt;&lt; algorithm_run_time &lt;&lt; "\n";
  • 对不起,我对 c++ 很陌生,我不知道怎么写
  • This 可能会对您有所帮助,但如果您是 C++ 新手,可能会有些困惑。像接受的答案所说的那样更改问题中的代码,然后您就可以通过get&lt;0&gt;(result_of_timer_function)获得时间。
  • 你对令人困惑的部分是对的,我的程序上还没有写任何计时器,所以不确定我应该改变什么?你想让我在这里复制我的代码,这样你就可以知道了吗?再次非常感谢您尝试帮助我!

标签: c++ algorithm sorting time clock


【解决方案1】:

编辑了您的代码,以秒为单位计算前 2 个案例的时间:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include<string>
#include <ctime>
#include <cstdlib>

using namespace std;

void merge(int[],int,int[],int,int[]);
void bubblemethod(int*,int);
void insertionmethod(int[],int);
void merge_sort(int[],int,int);
void mergemethod(int[],int,int,int);
void selectionmethod(int[],int,int);
int populateArray();

int size;
int*array;




int main(int argc, char** argv) {
    int menuOption;





    //int c2, n2;

    // printf("Ten random numbers in [1,100]\n");

    //for (c2 = 1; c2 <= 10; c2++) 
    //{
    //   n2 = rand()%100 + 1;
    //  printf("%d\n", n2);
    //}


    do

    {
        cout << endl << endl << "Select an option from the MENU:" << endl  ;
        cout << "1. Bubble Sort" << endl ;
        cout << "2. Insertion Sort" << endl ;
        cout << "3. Merge Sort" << endl  ;
        cout << "4. Selection Sort" << endl ;
        cout << "5. Quick Sort" << endl ;
        cout << "6. Exit the Program" << endl ;
        cin >> menuOption ;

        time_t t1 = 0;
        time_t t2 = 0;
        switch (menuOption)
        {
        case 1:

            size=populateArray();
            t1 = time(0);
            bubblemethod(array,size);
            t2 = time(0);

            break;

        case 2:

            size=populateArray();
             t1 = time(0);
            insertionmethod(array,size);
            t2 = time(0);


            break;
            /*
            case 3:
            cout <<  endl << "Enter the size of the list with integers:" << endl ;
            cin >> size;

            randomnum=size;

            cout<< endl <<"The random numbers in this size are:" << endl;

            for (c1 = 1; c1 <= size; c1++) 
            {
            n1 = rand()%size + 1;
            printf("%d\n", n1);
            array[c1-1]=n1;
            }

            merge_sort(array,c1,randomnum);

            cout<<"So, the sorted list (using MERGE SORT) will be :"<<endl;
            cout<<endl<<endl;

            for(c1=1;c1<=randomnum;c1++)
            cout<<array[c1-1]<<"    ";



            break;
            case 4:
            cout <<  endl << "Enter the size of the list with integers:" << endl ;
            cin>> size;

            randomnum=size;

            cout<< endl <<"The random numbers in this size are:" << endl;

            for (c1 = 1; c1 <= randomnum; c1++) 
            {
            n1 = rand()%size + 1;
            printf("%d\n", n1);
            array[c1-1]=n1;
            }


            selectionmethod(array,c1,randomnum);

            break;
            case 5:

            break;
            case 6:
            cout << endl << "End the program" << endl  ;
            break;
            */
        default:
            cout << endl << "Error in menu input. Valid menu options are 1 to 6." << endl  ;
        }// end switch

        cout <<"time taken = "<<t2-t1<<" seconds";
    }   while (menuOption !=6); // end do-while



}


void bubblemethod(int array[],int size)
{
    int d,swap,c1;

    for (c1 = 0 ; c1 <size; c1++)
    {

        for (d = 0 ; d < size - 1; d++)
        {
            if (array[d] > array[d+1]) /* For decreasing order use < */
            {
                swap   = array[d];
                array[d]   = array[d+1];
                array[d+1] = swap;
            }
        }
    }

    cout<< endl << "Sorted list:\n" << endl;


    for ( c1 = 0 ; c1 <size; c1++ )
        printf("%d\n", array[c1]);



}

void insertionmethod(int array[],int size)
{
    int d,t,c1;
    for (c1 = 1 ; c1 <= size - 1; c1++) 
    {
        d = c1;

        while ( d > 0 && array[d] < array[d-1]) 
        {
            t = array[d];
            array[d]  = array[d-1];
            array[d-1] = t;

            d--;
        }
    }

    printf("Sorted list:\n");

    for (c1 = 0; c1 <= size - 1; c1++) 
        printf("%d\n", array[c1]);

}

void merge_sort(int array[],int c1,int size)
{
    int mid;
    if(c1<size)
    {
        mid=(c1+size)/2;
        merge_sort(array,c1,mid);
        merge_sort(array,mid+1,size);
        mergemethod(array,c1,mid,size);
    }
} 

void mergemethod(int array[],int c1,int mid,int randomnum)
{
    int h,i,j,b[50],k;
    h=c1;
    i=c1;
    j=mid+1;

    while((h<=mid)&&(j<=randomnum))
    {
        if(array[h]<=array[j])
        {
            b[i]=array[h];
            h++;
        }
        else
        {
            b[i]=array[j];
            j++;
        }
        i++;
    }
    if(h>mid)
    {
        for(k=j;k<=randomnum;k++)
        {
            b[i]=array[k];
            i++;
        }
    }
    else
    {
        for(k=h;k<=mid;k++)
        {
            b[i]=array[k];
            i++;
        }
    }
    for(k=c1;k<=randomnum;k++) 
        array[k]=b[k];
}



void selectionmethod(int array[],int c1,int randomnum)
{
    int position,d,swap;
    for ( c1 = 0 ; c1 < ( randomnum - 1 ) ; c1++ )
    {
        position = c1;

        for ( d = c1 + 1 ; d < randomnum ; d++ )
        {
            if ( array[position] > array[d] )
                position = d;
        }
        if ( position != c1 )
        {
            swap = array[c1];
            array[c1] = array[position];
            array[position] = swap;
        }
    }

    printf("Sorted list:\n");

    for ( c1 = 0 ; c1 < randomnum ; c1++ )
        printf("%d\n", array[c1]);
}


int populateArray()
{
    int size;
    cout <<  endl << "Enter the size of the list with integers:" << endl ;
    cin >> size;


    int randomnum, c1, n1;

    randomnum=size;
    array=new int[size];

    cout<< endl <<"The random numbers in this size are:" << endl;

    for (c1 = 1; c1 <= size; c1++) 
    {
        n1 = rand()%size + 1;
        printf("%d\n", n1);
        array[c1-1]=n1;
    }

    return size;    

}

【讨论】:

  • 完成! :) 再次感谢您,祝您有愉快的一天!如果有什么我可以做的,请随时给我发消息!
【解决方案2】:
#include<time.h>
#include<iostream.h>

int main(){
    time_t t = clock();

    //Code goes here

    t = clock() - t;
    double time_taken = ((double)t)/CLOCKS_PER_SEC;
    cout<<time_taken;
return 0;
}

这应该会有所帮助。

【讨论】:

  • 是的,它确实有帮助,我将这段代码原样复制到我的 main 中?因为我已经有了这个 int main(int argc, char** argv) { 看起来如果我不这样做会导致冲突,“//code goes here”注释中的内容是什么?谢谢!
  • 您可以在此处放置您要计算时间的代码。
  • 我无法发布代码我尝试编辑我的原始帖子,但其中一半没有成为代码,它不会让我发布
  • 您可以将 timer.h 头文件添加到您的库中。然后创建变量:double start,end;调用,开始 = get_time(); /.. 你的代码 ../ end = get_time(); printf("耗时", end - start);
猜你喜欢
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多