主题:[讨论]一起研究下flashsort算法
			 euc
				 [专家分:4310]  发布于 2006-07-04 17:55:00
 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
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
euc [专家分:4310]  发布于 2006-07-07 00:27:00				
				谢谢,原来插值是这个作用。
哦,注释里说“with m about 0.1 n”,m是和n成正比的,所以时间就是n*log<0.1n>n ,这里变形之后应该就是O(n)了.
							 
									
			
我来回复