[英]I can't to check time of array sorting using time(NULL) function
我必须通过堆排序算法检查数组排序的时间,当时间至少为 1 秒时,我必须找到该数组中的元素数。 要检查它,我必须使用 time.h 库中的 time() function。 但是,当我计算排序结束和开始排序之间的差异时,我得到了 0 秒的 500 000 个元素的数组,我做错了什么?
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define TAB_MAX 500000
#define RANDOM_MAX 10
int parent(int i){
return i/2;
}
int left(int i){
return 2*i;
}
int right(int i){
return 2*i+1;
}
void heapify(int t[], int i, int size)
{
int largest, l, r;
int tmp;
l = left(i);
r = right(i);
largest = i;
if ((l <= size) && (t[l] > t[i]))
largest = l;
if ((r <= size) && (t[r] > t[largest]))
largest = r;
if (largest != i)
{
tmp = t[i];
t[i] = t[largest];
t[largest] = tmp;
heapify(t, largest, size);
}
}
void build_heap(int t[], int size){
int i;
for (i=size/2; i>0; i--)
heapify(t, i, size);
}
void heap_sort(int t[], int size){
int i, tmp, s;
build_heap(t, size);
for (i=size; i>1; i--)
{
tmp = t[1];
t[1] = t[i];
t[i] = tmp;
--size;
heapify(t, 1, size);
}
}
void print(int T[]){
int i;
printf("\n[");
for (i=0; i<TAB_MAX; i++)
printf("%d ", T[i]);
printf("]\n\n");
}
void tab_random(int T[]){
int i;
for (i=0; i<TAB_MAX; i++)
T[i] = rand()%RANDOM_MAX;
}
int main()
{
srand(time(NULL));
int tab[TAB_MAX];
tab_random(tab);
//print(tab);
int startTime = time(0);
heap_sort(tab, TAB_MAX-1);
int endtime = time(0);
int diff = endtime - startTime;
printf("Time of sorting: %ds", diff); // <- 0 sec.
//print(tab);
return 0;
}
所以数组排序用了不到 1 秒。
建议调用: clock()
,因为这将导致 CPU 周期计数。
这是 windows 和 linux 的 function
#ifdef WIN32
time_t getmsec()
{
timeb tb;
ftime( &tb );
time_t nCount = tb.millitm + (tb.time & 0xfffff) * 1000;
return nCount;
}
#else
time_t getmsec()
{
struct timeval te;
gettimeofday(&te, NULL); // get current time
long long milliseconds = te.tv_sec*1000LL + te.tv_usec/1000; // calculate milliseconds
return (time_t)milliseconds;
}
#endif
除了时间问题之外,代码被破坏了:
请注意,代码从不使用t[0]
。
for (i=size; i>1; i--)
{
tmp = t[1];
t[1] = t[i];
t[i] = tmp;
--size;
heapify(t, 1, size);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.