[ 最新更新:提供基准测试程序和初步结果,请参见下文]
所以我想用一个经典的应用程序来测试速度/复杂性的权衡:排序。
编写ANSI C函数,以递增顺序对浮点数数组进行排序。
您不能使用任何库,系统调用,多线程或内联ASM。
条目由两个部分组成:代码长度和性能。评分方式如下:条目将按长度(没有空格的#个字符的对数,因此可以保留一些格式)和性能(一个基准上的#秒的对数)进行排序,并且每个间隔[best,worst]线性归一化为[ 0,1]。一个程序的总分将是两个标准化分数的平均值。最低分获胜。每个用户一个条目。
必须(最终)进行排序(即输入数组必须在返回时包含排序的值),并且您必须使用以下签名,包括名称:
void sort(float* v, int n) {
}
要计算的字符:sort
函数中的字符,包括的签名以及函数调用的其他函数(但不包括测试代码)。
程序必须处理任何数字值float
和长度> = 0,最大2 ^ 20的数组。
我将sort
其及其依赖项插入测试程序,然后在GCC上编译(没有高级选项)。我将一堆数组放入其中,验证结果和总运行时间的正确性。测试将在Ubuntu 13下的Intel Core i7 740QM(Clarksfield)上运行。
阵列长度将跨整个允许范围,短阵列的密度更高。值将是随机的,且具有粗尾分布(正负范围内)。重复的元素将包含在某些测试中。
该测试程序位于:https : //gist.github.com/anonymous/82386fa028f6534af263
它将提交导入为user.c
。TEST_COUNT
实际基准测试中的测试用例()数量为3000。请在问题评论中提供任何反馈。
截止日期:3周(2014年4月7日,格林尼治标准时间16:00)。我将在2周内发布基准测试。
最好在截止日期前发布,以免将代码泄露给竞争对手。
根据基准测试发布的初步结果:
以下是一些结果。最后一列以百分比形式显示分数,分数越高越好,将Johnny Cage放在第一位。比一部分算法慢几个数量级的算法是在部分测试中运行的,并且需要时间推断。qsort
包含C自己的用于比较(强尼的速度更快!)。我将在结束时进行最终比较。