【发布时间】:2013-12-21 04:47:30
【问题描述】:
我正在尝试对双精度数组进行排序。它非常慢:
double price[1000];
void sortArrayOfDoubles(double price[ ], int length)
{
qsort(price, length, sizeof (double), compareDoubles);
}
我用这个作为比较方法,速度很慢。称之为方法A:
int compareDoubles_SlowMethod(const void* elem1, const void* elem2)
{
if(*(const double*)elem1 < *(const double*)elem2)
return -1;
return *(const double*)elem1 > *(const double*)elem2;
}
然后我尝试了这个方法 B,它比另一种慢 3 倍以上。
int compareDoubles_EvenSlowerMethod(const void *x, const void *y)
{
double xx = *(double*)x, yy = *(double*)y;
if (xx < yy) return -1;
if (xx > yy) return 1;
return 0;
}
有什么更快的吗?
【问题讨论】:
-
你如何衡量这个?你在看什么样的表演?你在什么硬件上运行它?
-
什么操作系统,什么编译器?你是如何实现 qsort 的?
-
我正在使用 VS2010 分析器进行测量。我在双 CPU(英特尔 5690)工作站上运行它,具有 12 个物理内核和 24 个逻辑内核,以及 192 GB(是 gigs,不是 megs)的 ram,以及 1 tb 固态驱动器。 Qsort 是 VS2010 C 库例程。目标是Windows7,64位
-
对数组进行排序需要多长时间以及如何测量它?在 windows 中启动一个新进程非常耗时,所以如果你测量整个程序的执行时间,你的测量就会关闭。
-
您是否正在对代码进行优化?我觉得优化后应该是一样的。
标签: c arrays sorting double qsort