Re: Breakthrough
On Mon, 4 Jun 2012 21:44:30 +0200
MelissA <melis@a.com> wrote:
On Mon, 4 Jun 2012 15:32:34 +0000 (UTC)
Juha Nieminen <nospam@thanks.invalid> wrote:
In comp.lang.c++ MelissA <melis@a.com> wrote:
#define N 10000000
int main()
{
std::list<int> L1;
long long sum=0,newSum=0;
for(int i = 0; i < N; ++i)
{
int d = rand();
sum+=d;
L1.push_back(d);
Your test is basically useless as a measurement of sorting speed
because the vast majority of the time will be spent on those
push_back() calls.
If you want to test sorting speed and nothing else, you have to
discard the time spent in memory allocation.
Here is just sorting time, C version is significantly faster:
bmaxa@maxa:~/jacob/ccl$ ./testlist
sort time 3.140
Sum = 10738138201479754
bmaxa@maxa:~/jacob/ccl$ ./cpplist
sort time 5.350
Sum = 10738138201479754
bmaxa@maxa:~/jacob/ccl$
But watch out this:
It is faster to populate vector from list, then
to sort vector , then to clear list, then
to populate list from vector then C version! ;)
bmaxa@maxa:~/jacob/ccl$ time ./cpplist
sort time 0.750
Sum = 10738138201479754
real 0m1.813s
user 0m1.660s
sys 0m0.152s
bmaxa@maxa:~/jacob/ccl$ time ./testlist
sort time 3.140
Sum = 10738138201479754
real 0m4.302s
user 0m4.208s
sys 0m0.096s
bmaxa@maxa:~/jacob/ccl$ cat cpplist.cpp
#include <list>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#define N 10000000
int main()
{
std::list<int> L1;
long long sum=0,newSum=0;
for(int i = 0; i < N; ++i)
{
int d = rand();
sum+=d;
L1.push_back(d);
}
std::vector<int> tmp(L1.begin(),L1.end());
clock_t t = clock();
std::sort(tmp.begin(),tmp.end());
clock_t et = clock();
L1.clear();
L1.insert(L1.begin(),tmp.begin(),tmp.end());
printf("sort time %.3f\n",float(et - t)/CLOCKS_PER_SEC);
for(auto it : L1)
{
newSum+= it;
}
if (sum != newSum)
printf("Failed\n");
else printf("Sum = %lld\n",sum);
}