Algorithm 一种O(n)排序算法

Algorithm 一种O(n)排序算法,algorithm,sorting,Algorithm,Sorting,这是一个家庭作业问题,所以我希望避免完整的答案,如果可能的话,我更喜欢提示 给定一个随机整数数组A[1…x],程序应该以递增顺序返回第一个y数组元素,其中1提示:假设您有一个O(n)时间算法来选择yth元素…实际上sqrt(x)的增长速度比log(x)快,所以O(x*sqrt(x))比O(n*log(x))差。所以你还没有做得比整理整个列表更好 有几种方法可以解决这个问题。对于其中一个,请查看并查看所有常见的排序算法。哪种算法可以最有效地为您提供前几个元素 其中1表示y,使用快速排序思想,选择一

这是一个家庭作业问题,所以我希望避免完整的答案,如果可能的话,我更喜欢提示


给定一个随机整数数组A[1…x],程序应该以递增顺序返回第一个y数组元素,其中1提示:假设您有一个O(n)时间算法来选择yth元素…

实际上sqrt(x)的增长速度比log(x)快,所以O(x*sqrt(x))比O(n*log(x))差。所以你还没有做得比整理整个列表更好

有几种方法可以解决这个问题。对于其中一个,请查看并查看所有常见的排序算法。哪种算法可以最有效地为您提供前几个元素


其中1表示y,使用快速排序思想,选择一个随机数并将其分成两部分。 第1部分(较小)和第2部分(较大)。
如果Part1的长度小于y,则在Part2中用y'=y-len进行分区(Part1) 如果Part1的长度大于y,则在Part1中用y'=y进行分区 如果Part1的长度==y,则对Part1进行排序

对于分区,平均值应该接近O(n)(我现在不能批准它,但它非常快)(我将尝试为这部分找到一些材料)。。

y的排序需要ylog(y)1/2*sqrt(x)*日志(x)<1/2*sqrt(x)*sqrt(x)=>1/2 x

你只需要一个提示,对吗

仔细阅读random_hacker的评论,以防你错过了他给出的重要提示。有一种对数组进行排序的算法,在这种算法中,一个微小的、微小的更改将产生您的算法


一般来说,如果y不限于sqrt(x),你会得到一个在O(x+y*logx)中工作的算法,如果y=O(x/logx),那么这个算法就是O(x),当你看过y时,情况当然是这样?当我看到O(n)要求时,我唯一想到的是“程序应该返回第一个y数字”。也许是数字?@ruslki——是的,我指的是第一个y数组项目。现在解决这个问题。O(sqrt(x)*x)=O(x^(3/2))。任何指数大于1的多项式时间算法都渐近大于n log n算法,因此n log n比sqrt(n)*n好,那么我就不必称它为sqrt(x)次吗?这仍然是sqrt(x)*y。@thezhaba:你走错方向了。进一步的提示:想想快速排序的第一步。看起来人们甚至不知道写的是对还是错就投了否决票。特别是对于不完整的答案和提示,更难确定是否有什么地方出错。可笑!:-)这样的算法会有所帮助。另一个提示:预过滤。我不明白这是怎么得到的,它怎么会比O(n^(3/2))更好,在那页上有很多好的排序算法…:)这是一个非常详细和具体的提示。运行时间平均为O(n)。但最坏的情况是O(n*n),而不是O(n)。我不知道这是否足以解决这个家庭作业问题。提示@gnasher:看一看日期,扎巴现在可能已经是讲师了。
x + (x-1) + (x-2) + ... + (x-y)