排序算法问题

时间:2010-10-11 03:13:38

标签: algorithm

这是一个脑筋急转弯,几天来一直在我脑海中。

我们有一个n个元素的序列S.每个元素是[0,n ^ 2-1]范围内的整数。描述在O(n)时间内对S进行排序的简单方法。

可能显而易见的是我错过了,但我很欣赏任何见解。

4 个答案:

答案 0 :(得分:4)

Bucket Sort!

  

Bucket sort或bin sort是一种排序算法,它通过将数组分区为多个存储区来工作。然后,使用不同的排序算法,或者通过递归地应用桶排序算法,对每个桶进行单独排序。它是一种分布排序,并且是最基本排序的表亲,具有最重要的数字风格。铲斗分类是鸽笼分类的概括。由于桶排序不是比较排序,因此Ω(n log n)下限不适用。计算复杂性估计涉及桶的数量。

答案 1 :(得分:2)

在基数n中写入并通过对每个桶进行计数排序(桶对应于基数n中的数字)进行桶排序。

O(n)时间,O(n)空间。

答案 2 :(得分:2)

Radix Sort!(这只是桶排序的特例。)

答案 3 :(得分:0)

Quicksort是O(n log n),作为排序列表的标准“好算法”方式。所以必须有某种“技巧”才能达到O(n)时间。

这个数据的唯一真正的诀窍是它从0到n ^ 2-1 ......但我想不出如何在O(n)时间内对它进行排序....

P.S。听起来像是家庭作业,而不是为了知识而“困惑”的东西

P.P.S。我没有想到铲斗排序。