回 帖 发 新 帖 刷新版面

主题:[讨论]一起研究下flashsort算法

号称O(n)的,但我只能看懂前面一点,后面到/**** PERMUTATION *****/就不懂了,大家看看。
http://www.neubert.net/Flacodes/FLACodes.html#Sprung3

回复列表 (共2个回复)

沙发

感觉flashsort就是快速排序算法的一个改进,思想都差不多。
快速排序是不断把数组分成比其中某个元素大和小的两段;

flashsort则是根据最大最小值把数组分成m个区间,各元素按值分到各区间中;再将各区间重复上述分区过程进行排序。

/**** PERMUTATION *****/后面的一段循环实现把元素分到各区间中。

在我机器上运行的一组float值的排序实测参考数据(单位:秒):
 数组大小  1000000  2000000  5000000  10000000  20000000  50000000
快速排序    0.64     1.5       6.9      22.2      76.5
flashsort   1.32     2.56      6.8      13.7       27.3     76

从结果上看,倒是基本符合O(n),不知道如何证明的。

板凳

谢谢,原来插值是这个作用。
哦,注释里说“with m about 0.1 n”,m是和n成正比的,所以时间就是n*log<0.1n>n ,这里变形之后应该就是O(n)了.

我来回复

您尚未登录,请登录后再回复。点此登录或注册