首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >大多数元素重复的数组的快速排序算法?

大多数元素重复的数组的快速排序算法?
EN

Stack Overflow用户
提问于 2011-11-18 13:21:23
回答 5查看 11.1K关注 0票数 12

对主要包含少量重复元素的数组进行排序的有效方法是什么?即,如下所示的列表:

{ 10,10,55,10,999,8851243,10,55,55,55,10,999,8851243,10 }

假设equal元素的顺序无关紧要,那么最坏情况/平均情况下的好算法是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-18 14:06:46

在实践中,您可以首先遍历数组一次,然后使用哈希表计算单个元素出现的次数(这是O(n),其中n=列表的大小)。然后获取所有唯一元素并对其进行排序(这是O(k log k),其中k=唯一元素的数量),然后以O(n)步将其扩展回n个元素的列表,从哈希表中恢复计数。如果k << n,你节省了时间。

票数 18
EN

Stack Overflow用户

发布于 2011-11-19 01:54:35

我会尝试使用一些映射函数的Counting sort。即。您不会使用大小等于元素范围的频率数组,而是迭代数组,写下不同的元素,并在频率数组的映射函数中使用它们。

这样,算法只有一次额外的迭代和一个映射函数,它们应该在固定的时间内工作(使用某种哈希表)。这种方法的复杂性是O(n),这应该是最优的。

票数 5
EN

Stack Overflow用户

发布于 2011-11-18 19:02:51

不是最好的算法,但很简单:

你可以把所有的东西都放在trie里,然后把树叶放在柜台上。这应该是O(n*m),其中n是元素的数量,m是最大元素的大小(通常是一个常量,但不是必须的)。然后预排序遍历tie,当你点击一个叶子时输出当前键的counter元素。这应该只需要O(n+p),其中p是trie的大小,与n相比应该很小。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8178119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档