LINUX.ORG.RU

Временная оценка работы алгоритма (С++)


0

0

Нужно подсчитать время затраченное на сортировку небольшого массива.Немогу найти для этого подходящую функцию. Пробовал clock_t но у меня ничего не получилось, так как возращался всегда «0». Вообщем прошу помощи, если можно то простыми примерами исползования.

RETURN VALUE
The value returned is the CPU time used so far as a clock_t; to get the
number of seconds used, divide by CLOCKS_PER_SEC. If the processor
time used is not available or its value cannot be represented, the
function returns the value (clock_t) -1.

Windos7
()

man time.h

// Смотри ф-и clock, time, difftime.

vkos ★★
()
#include <sys/timeb.h>

...
struct timeb tp;
ftime( &tp );
int64_t start = 1000L * tp.time + tp.millitm;
...
ftime( &tp );
int64_t now = 1000L * tp.time + tp.millitm;

вроде где-то так

lester ★★★★
()

#include «time.h»

double start, end;
start = clock();
...
end = clock();
printf(«%d clocks\n», (int)(end-start));

что такие эти клоки - в первом ответе.

A2K
()
Ответ на: комментарий от A2K

Все равно пишет «0». Что я не так сделал?

void puzirki(int n)
{
	double start, end;
	start = clock();
    int temp;
for (int i=0; i<9;i++)
{
    for (int i=0; i<9;i++)
    {
        if (a[i]>a[i+1])
       {
           swap(&a[i],&a[i+1]);
       }
    }
}
	end = clock();
	printf("%d clocks\n", (int)(end-start));
}

shmel210
() автор топика

#include <time.h> #include <sys/time.h>

double dtime() { struct timeval ct; struct timezone tz; gettimeofday(&ct, &tz); return (ct.tv_sec + ct.tv_usec/1e6); }

... double t0=dtime(); printf(«прошло %f секунд\n», dtime()-t0;

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

#include <time.h> #include <sys/time.h>

double dtime() { struct timeval ct; struct timezone tz; gettimeofday(&ct, &tz); return (ct.tv_sec + ct.tv_usec/1e6); }

... double t0=dtime(); printf(«прошло %f секунд\n», dtime()-t0;

если можно опубликовать тоже самое только с тегом code;

будет ли это работать, у меня же функция типа void, а у тебя в коде есть инструкция return.

shmel210
() автор топика

я иду тупым путём: пишу цикл, который делает то, что нужно, 1000000 раз, компилю и использую time ./a.out

Obey-Kun ★★★★★
()
Ответ на: комментарий от shmel210

Я вообще-то имел в виду, что время сортировки 9 элементов у тебя и будет 0. Сортируй хотя бы несколько миллионов.

ftor
()
Ответ на: комментарий от shmel210

если можно опубликовать тоже самое только с тегом code;

#inclyde <sys/time.h>
#include <time.h>
double dtime() {
	struct timeval ct;
	struct timezone tz;
	gettimeofday(&ct, &tz);
	return (ct.tv_sec + ct.tv_usec/1e6);
}


void puzirki(int n) 
{ 
   double start = dtime();
    int temp; 
for (int i=0; i<9;i++) 
{ 
    for (int i=0; i<9;i++) 
    { 
        if (a[i]>a[i+1]) 
       { 
           swap(&a[i],&a[i+1]); 
       } 
    } 
} 
    printf("алгоритм проработал %.2f секунд\n", dtime() - start); 
} 

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

P.S. только сейчас заметил, что всего 9 элементов, меняй формат printf на %.8f

Eddy_Em ☆☆☆☆☆
()

не быстрее O(n*log(n)), если используется только попарное сравнение

dimon555 ★★★★★
()
Ответ на: комментарий от shmel210

Кстати, не понимаю, зачем делать лишние сравнения? Правильнее так:

for (int j=9; j>0;j--)
    for (int i=0; i<j;i++)
        if (a[i]>a[i+1]) 
           swap(&a[i],&a[i+1]); 

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

А еще правильнее - так:

for (int i=0; i<9;i++) 
   if (a[i]>a[i+1]){
      swap(&a[i],&a[i+1]);
      if(i>0) i-=2
   }
По крайней мере, это моя любимая сортировка за O(n^2)

solid
()
Ответ на: комментарий от Eddy_Em

Все огромное спасибо, особенно «Eddy_Em»!!!

shmel210
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.