首页 > 解决方案 > 我无法使用 time(NULL) 函数检查数组排序的时间

问题描述

我必须通过堆排序算法检查数组排序的时间,当时间至少为 1 秒时,我必须找到该数组中的元素数。要检查它,我必须使用 time.h 库中的 time() 函数。但是,当我计算排序结束和开始排序之间的差异时,我得到了 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;
}

标签: carraysalgorithmheapsorttime.h

解决方案


所以数组排序用了不到 1 秒。

建议调用:clock()因为这将导致 CPU 周期计数。


推荐阅读