Pio*_*icz 14 c sorting algorithm
我正在排序整数键的数组.
stdlib.h qsort ;
这很慢,现在我的函数在每次执行的排序上花费0.6秒,stdlib.h qsort是1.0s; 这与std :: sort具有相同的性能
蒂姆索特 ;
我试过这个:https://github.com/swenson/sort和这个:http://code.google.com/p/timsort/source/browse/trunk/timSort.c?specs = snn17&r = 17 ; 两者都明显慢于stdlib qsort
到目前为止,他们对快速排序和插入排序的组合对我的数据来说是最快的; 我尝试了各种设置和pivot作为中间元素(不是3的中位数)和插入排序从28个元素子数组开始(默认情况下不是8)提供最佳性能
贝壳排序 ;
本文中的差距很简单:http://en.wikipedia.org/wiki/Shellsort ; 它很不错,虽然比stdlib qsort慢
我的想法是qsort做了很多交换和废弃(即反向)排序的子序列,所以应该有一些方法通过利用数据的结构来改进它,不幸的是我的所有尝试到目前为止都失败了.
如果你很好奇那是什么类型的数据,那些是在已经在前面板上排序的各种板上评估的扑克牌组(这是排序后的子序列来自哪里).
该功能在C.我使用Visual Studio 2010.任何想法?
示例数据:http://pastebin.com/kKUdnU3N
示例完整执行(1176种):https://dl.dropbox.com/u/86311885/out.zip
如果您首先通过数组对数字进行分组以消除重复项,该怎么办?每个数字都可以进入哈希表,其中数字是键,它出现的次数是值.因此,如果数组中的数字750 000出现了57次,则哈希表将保持key = 750000; 值= 57.然后,您可以按键对小得多的哈希表进行排序,键长度应少于100个元素.
有了这个,您只需要通过数组一次,另一次通过更小的哈希表键列表.这应该避免大多数交换和比较.
归档时间: |
|
查看次数: |
891 次 |
最近记录: |