是否有排序在C大阵数字的一个好的图书馆?
-
19-09-2019 - |
题
如果我有一个大阵列的整数或浮点数的,什么是好的算法/ 实施(在C)排序?
这是一个有点晚在游戏中的编辑......但我期待的正确性和速度的。
解决方案 2
有关排序号码的阵列,可以考虑一个基数排序算法。当适当地设计,这些种类的应提供比GLIBC的qsort()更好的性能。
在usort库包含所有主要Ç数字类型特定类型的实施方式。
http://bitbucket.org/ais/usort/wiki/Home
基数排序过的qsort GLIBC的速度优势是用于双精度在N =百万在我的64位Intel膝上型浮点数约2.5倍。然而,由于基数排序是通过数据需要遍恒定数目的线性时间算法如N生长的优点应该更大。
对于非常小的N,相同的代码分派给一个或内省排序插入排序。
其他提示
的qsort()从标准库是一个good'un。
在比较函数将对于这些情况是微不足道的:
int cmp_int(const void *a, const void *b)
{
const int *ia = a;
const int *ib = b;
if (*ia < *ib)
return -1;
if (*ia > *ib)
return 1;
return 0;
}
int cmp_float(const void *a, const void *b)
{
const float *fa = a;
const float *fb = b;
if (*fa < *fb)
return -1;
if (*fa > *fb)
return 1;
return 0;
}
(编辑:这些证书的版本的基础上减去b。从一个依赖于符号溢出的行为,所以它不是一个好主意)
这是从来没有一个坏主意,使用的qsort ...除非你知道一些有关的数字。
您已经标记为基数排序。多少内存,你准备投资?在特定范围内的数字?他们有使基数分拣可行?属性
除非你要使用大量的内存,快速排序是一个很好的选择。
由于巨大的RAM我们来说没什么大不了,下面的一组排序是可能的量:标志着一个巨大的RAM位阵列为每个拥有数位,然后通过扫描RAM读取它们赶走了。的特定于硬件的优化许多可应用于该标记和扫描阶段。
不隶属于 StackOverflow