繁体   English   中英

我无法使用 time(NULL) function 检查数组排序的时间

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM