小编Bri*_*007的帖子

数百万UINT64 RGBZ图形像素的最快排序算法

uint64_t使用来自.RAW文件的RGB数据排序超过1000万s,花费了79%的C程序时间qsort.我正在寻找这种特定数据类型的更快排序.

作为RAW图形数据,数字是非常随机的,并且~80%是唯一的.不需要对排序数据进行部分排序或运行.4 uint16_tS的内部的uint64_t是R,G,B和零(可能是一个小计数<=〜20).

我有最简单的比较函数,我可以想到使用unsigned long longs(你不能只是减去它们):

qsort(hpidx, num_pix, sizeof(uint64_t), comp_uint64); 
...
int comp_uint64(const void *a, const void *b)  {
    if(*((uint64_t *)a) > *((uint64_t *)b))  return(+1);
    if(*((uint64_t *)a) < *((uint64_t *)b))  return(-1);
    return(0);
}  // End Comp_uint64().
Run Code Online (Sandbox Code Playgroud)

StackExchange上有一个非常有趣的"编程拼图和代码高尔夫",但他们使用了floats.然后有QSort,RecQuick,堆,stooge,树,基数......

swenson/sort看起来很有趣,但对我的数据类型没有(明显的)支持uint64_t.而"快速排序"时间是最好的.有些消息称,系统qsort可以是任何东西,不一定是"快速排序".

C++排序绕过了void指针的通用转换,并实现了对C的性能的巨大改进.必须有一种优化的方法,以经线速度通过64位处理器猛击U8.


系统/编译器信息:

我目前正在使用GCC和Strawberry Perl

gcc version 4.9.2 (x86_64-posix-sjlj, built by strawberryperl.com
Intel 2700K Sandy Bridge CPU, 32GB DDR3
windows 7/64 pro

gcc -D__USE_MINGW_ANSI_STDIO -O4 -ffast-math -m64 -Ofast …
Run Code Online (Sandbox Code Playgroud)

c sorting algorithm performance

4
推荐指数
1
解决办法
758
查看次数

标签 统计

algorithm ×1

c ×1

performance ×1

sorting ×1