c - 我无法使用 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;
}
解决方案
所以数组排序用了不到 1 秒。
建议调用:clock()
因为这将导致 CPU 周期计数。
推荐阅读
- ios - UIScrollView 使用 drawRect 绘制标尺
- excel - Excel和Matlab中数字求和的奇怪结果
- node.js - 如何在嵌入式 Node.js 脚本中将 Cloudformation 参数引用为变量?
- python - 给出未知名称时如何摆脱KeyError
- javascript - 将数组缩减为组
- python - 使用 docker-py 在 Azure 上运行 Docker 容器
- reactjs - 反应让道具进入孩子
- c# - 使用类 Map 的字典在 C# 中使用多态性
- react-native - 有什么办法可以将 TabBar 放在我的标题上
- mongodb - 如何避免集合中的重复条目?