sonlexqt
sonlexqt

Reputation: 6469

C++ - Calculate execution time of a function always = 0?

I use clock() in library to calculate excution time of a function, which is BubbleSort(..) function in my code below. But probleam is that the return execution time always = 0 (and it shows no unit, too). This is my code:

#include <iostream>
    #include <ctime>
    using namespace std;

    void BubbleSort(int arr[], int n)
    {
        for (int i = 1; i<n; i++)
            for (int j = n-1; j >=i; j-- )
                if (arr[j] < arr[j-1])
                {
                    int temp = arr[j];
                    arr[j] = arr[j-1];
                    arr[j-1] = temp;
                }
        return;
    }

    int main()
    {
        int arr[] = {4,1,7,2,6, 17, 3, 2, 8,1};
        int len = sizeof(arr)/sizeof(int);
        cout << "Before Bubble Sort: \n";
        for (int i=0;i<len;i++)
        {
            cout << arr[i] << " ";
        }
        clock_t start_s=clock(); // begin
        BubbleSort(arr,len);
        clock_t stop_s=clock();  // end
        cout << "\nAfter Bubble Sort: \n";
        for (int i=0;i<len;i++)
        {
            cout << arr[i] << " ";
        }
        // calculate then print out execution time - currently always returns 0 and I don't know why
        cout << "\nExecution time: "<< (double)(stop_s - start_s)/CLOCKS_PER_SEC << endl;
        //system("pause");
        return 0;
    }

I haven't known how to fix this problem yet .. So hope you guys can help me with this. Any comments would be very appreciated. Thanks so much in advanced !

Upvotes: 1

Views: 3682

Answers (2)

thermite
thermite

Reputation: 512

I modified your code as such and both start end stop have the value of 0. (ubuntu 13.10)

    std::cout<<"start: "<<start_s<<std::endl;
    BubbleSort(arr,len);
    clock_t stop_s=clock();  // end
    std::cout<<"stop: "<<stop_s<<std::endl;

you probably want something more like gettimeofday()

this http://www.daniweb.com/software-development/cpp/threads/120862/clock-always-returns-0 is an interesting discussion of the same thing. the poster concluded that clock()(on his machine) had a resolution of about 1/100 of a sec. and your code is probably ( almost certainly) running faster than that

Upvotes: 0

MikeMB
MikeMB

Reputation: 21136

As you have only a very small array, the execution time is probably much shorter than the resolution of clock(), so you either have to call the sort algorithm repeatedly or use another time source.

Upvotes: 2

Related Questions