Sorting 给定O(n)的存储空间,在{1,2,…n^2)范围内对n个元素排序的速度有多快?

Sorting 给定O(n)的存储空间,在{1,2,…n^2)范围内对n个元素排序的速度有多快?,sorting,Sorting,我正在考虑使用计数排序。但我不认为这是答案,因为在本例中,k是n^2。因此排序时间将是O(n+n^2)。而且我认为这将超过存储限制 有什么想法吗 谢谢。您可以使用a来实现这一点,它在O(n log n)中运行,不需要额外的空间(因为它已就位)。您可以使用稍微修改的版本,以便将列表拆分为n个部分而不是一半。合并排序的时间复杂度为O(n log n),但我不知道如何获取编辑后的版本。 如果有人帮助我,我会把它添加到我的答案中:) 编辑: 似乎已经有人发明了这个,请看@jspersenkn0wn的答案

我正在考虑使用计数排序。但我不认为这是答案,因为在本例中,k是n^2。因此排序时间将是O(n+n^2)。而且我认为这将超过存储限制

有什么想法吗


谢谢。

您可以使用a来实现这一点,它在O(n log n)中运行,不需要额外的空间(因为它已就位)。

您可以使用稍微修改的版本,以便将列表拆分为n个部分而不是一半。合并排序的时间复杂度为O(n log n),但我不知道如何获取编辑后的版本。
如果有人帮助我,我会把它添加到我的答案中:)

编辑:

似乎已经有人发明了这个,请看@jspersenkn0wn的答案

你看了吗?@Makoto:当你为快速排序选择一个不好的轴时,运行时间将是O(n^2)。此外,我还得到了O(n)存储空间,所以我想我可以使用需要一些空间的排序算法。也许我误解了,但这似乎是一个两位数的基数n排序,因此是O(n)。第一次通过的桶在[I]%n上,第二次通过的桶在[I]/n上。这需要O(n)辅助存储。(PS这听起来很像家庭作业,对存储和异常条件有非常具体的要求;若有,请贴上标签。)