Algorithm 寻找关于快速排序算法复杂性的澄清
有人能解释为什么快速排序的最佳运行时不是线性的吗?有没有办法使快速排序的最佳运行时线性化?如果是这样的话,为什么在实践中通常不使用它们呢?你至少应该浏览维基链接。。。他们用图表和动画进行了解释,这很容易理解 快速排序在O(n2)时间内运行,最坏情况为最佳/平均O(n log n)。在实践中,尽管它的最坏情况更高,但它的性能通常优于heapsort和mergesort(最坏情况O(n logn)排序)Algorithm 寻找关于快速排序算法复杂性的澄清,algorithm,sorting,quicksort,Algorithm,Sorting,Quicksort,有人能解释为什么快速排序的最佳运行时不是线性的吗?有没有办法使快速排序的最佳运行时线性化?如果是这样的话,为什么在实践中通常不使用它们呢?你至少应该浏览维基链接。。。他们用图表和动画进行了解释,这很容易理解 快速排序在O(n2)时间内运行,最坏情况为最佳/平均O(n log n)。在实践中,尽管它的最坏情况更高,但它的性能通常优于heapsort和mergesort(最坏情况O(n logn)排序) 除非已经排序,否则排序只能在线性时间内运行,这仅适用于具有最佳案例O(n)的排序。当然,您可以首
除非已经排序,否则排序只能在线性时间内运行,这仅适用于具有最佳案例O(n)的排序。当然,您可以首先检查输入是否已排序,如果已排序,则立即返回。这将产生一个具有线性最佳情况复杂度的算法。但是,最终得到的是“修改的快速排序”,而不是“快速排序”。快速排序是一种直接比较排序方法。每个这样的方法都在每个步骤上使用二进制描述(即直接比较),以在排序的两个可能结果之间进行分支。N个元素数组的所有可能排序都是N!因此,能够输出每个结果的二叉决策树的最低高度是log(N!),这可以被证明,尽管不是很容易的方式,O(log(N!))=O(N*log(N))。因此,没有一种直接比较排序算法的复杂度可能比这一算法更好
因此,由于快速排序是这种算法的一个例子,它的复杂度永远不会低于O(N*log(N)),因此它不能是线性的。听起来像是一个“直接问题”*如果你知道我的意思……我不确定你的意思。如果你认为这是家庭作业,我可以向你保证不是。您的任何有效输入都会有所帮助。