Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 为什么不使用flashsort对整数数据进行排序?_Algorithm_Sorting - Fatal编程技术网

Algorithm 为什么不使用flashsort对整数数据进行排序?

Algorithm 为什么不使用flashsort对整数数据进行排序?,algorithm,sorting,Algorithm,Sorting,我发现flashsort的发明者认为它适用于均匀分布的数据,而现实世界中的大多数数据都接近于均匀分布。在从事项目的大部分时间里,我发现数据几乎是一致的。例如,我从未每天遇到像[1,35001010000009999090909090]这样的数据。我的数据可能看起来像[3002005009061500],随着n的增长,我们将得到更统一的数据。读完这篇文章后,我发现若任何类包含太多数据,那个么我们可以递归调用flashsort来进一步划分数组 我错过什么了吗? 为什么我们不首先对整数数据使用flas

我发现flashsort的发明者认为它适用于均匀分布的数据,而现实世界中的大多数数据都接近于均匀分布。在从事项目的大部分时间里,我发现数据几乎是一致的。例如,我从未每天遇到像[1,35001010000009999090909090]这样的数据。我的数据可能看起来像[3002005009061500],随着n的增长,我们将得到更统一的数据。读完这篇文章后,我发现若任何类包含太多数据,那个么我们可以递归调用flashsort来进一步划分数组

我错过什么了吗?
为什么我们不首先对整数数据使用flashsort,如果它在最坏的情况下运行,那么我们可以使用类似introsort的排序来避免O(n^2)

仅供参考,现在越来越多的语言默认使用,因为它处理真实世界的数据集比简单的快速排序实现要好得多。我怀疑默认情况下不会经常使用flashsort和radix sort,因为它们只对特定数据集有效,而标准库通常包含少量更通用的算法。更专业的软件(如数据库引擎)可能会在有意义的地方使用更专业的算法。@JeremyBanks在库排序算法中不包括flash排序肯定还有其他原因。java库在n小时使用插入排序,在n大时使用合并排序,在n大时使用快速排序。那么为什么要使用o(nlogn)排序算法呢当flashsort可以在o(n)中给出相同的结果时?如果目标是对整型数据进行排序,则基数排序最快,尽管它需要第二个数组和一个小的计数矩阵来转换为索引,因此空间开销为o(n),但在典型的PC上,这不再是一个问题。根据我(公认的主观)的经验,按整数键排序实际上非常罕见。当存在整数实体时,它们通常已经是键(数据是预先排序的),或者表示一个标志或某种状态,而您通常不会对其进行排序。更常见的请求是按字符、浮点或时间字段对数据进行排序。在我看来,排序算法通常使用随机排序的唯一整数数组进行基准标记,这实际上是相当愚蠢的,因为这种类型的输入在野外几乎从未出现过。@user3811315-空间不是问题,因为std::stable_sort()将temp数组分配为数据大小的1/2和std::stable_partition()分配与数据大小相同的临时数组。杰里米·班克斯(Jeremy Banks)在早些时候的评论中回答了这个问题:这些库使用了少量通用算法。