主题:[讨论]一起研究下flashsort算法
euc
[专家分:4310] 发布于 2006-07-04 17:55:00
号称O(n)的,但我只能看懂前面一点,后面到/**** PERMUTATION *****/就不懂了,大家看看。
http://www.neubert.net/Flacodes/FLACodes.html#Sprung3
回复列表 (共2个回复)
沙发
aboutbmp [专家分:830] 发布于 2006-07-06 21:55:00
感觉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),不知道如何证明的。
板凳
euc [专家分:4310] 发布于 2006-07-07 00:27:00
谢谢,原来插值是这个作用。
哦,注释里说“with m about 0.1 n”,m是和n成正比的,所以时间就是n*log<0.1n>n ,这里变形之后应该就是O(n)了.
我来回复