Algorithm Cormen快速排序修正配分函数

Algorithm Cormen快速排序修正配分函数,algorithm,time-complexity,quicksort,Algorithm,Time Complexity,Quicksort,我正在学习算法简介中的快速排序。我被困在第7章快速排序的问题上- “当数组A[p…r]中的所有元素都具有相同的值时,分区返回的q值是多少?修改分区以使q=⌊(p+r)/2⌋ 当>数组中的所有元素A[p…r]具有相同的值时。“ 第一部分很简单,答案肯定是r。但我甚至不知道第二部分在问什么。我的意思是,为什么要将pivot设置为(p+r)/2。此外,我无法理解我在谷歌搜索时找到的解决方案 请帮助我理解在所有元素都相等的情况下,这种修改的优点是什么,如果可能,请提供这样做的算法。通过将轴心设置在p和r

我正在学习算法简介中的快速排序。我被困在第7章快速排序的问题上-

“当数组A[p…r]中的所有元素都具有相同的值时,分区返回的q值是多少?修改分区以使q=⌊(p+r)/2⌋ 当>数组中的所有元素A[p…r]具有相同的值时。“ 第一部分很简单,答案肯定是r。但我甚至不知道第二部分在问什么。我的意思是,为什么要将pivot设置为(p+r)/2。此外,我无法理解我在谷歌搜索时找到的解决方案


请帮助我理解在所有元素都相等的情况下,这种修改的优点是什么,如果可能,请提供这样做的算法。

通过将轴心设置在p和r的中间,我们将大小为n的数组划分为大小为n/2的两个子问题。如果为下面的递归绘制递归树,您将看到它的高度为O(lgn)

T(n)=2T(n/2)+O(n)

想象一下,如果从分区返回的枢轴位置始终是数组中的最后一个元素。那么运行时的重复周期将为

T(n)=T(n-1)+O(n)

你现在明白了,如果递归树像一个链表,为什么效率会很低?在这两种情况下,尝试绘制树并添加每个节点的成本

修改分区方法以返回(p+r)/2也很容易


提示:一种简单的方法是拆分通过将轴设置在p和r的中间,我们将大小为n的数组拆分为大小为n/2的两个子问题。如果为下面的递归绘制递归树,您将看到它的高度为O(lgn)

T(n)=2T(n/2)+O(n)

想象一下,如果从分区返回的枢轴位置始终是数组中的最后一个元素。那么运行时的重复周期将为

T(n)=T(n-1)+O(n)

你现在明白了,如果递归树像一个链表,为什么效率会很低?在这两种情况下,尝试绘制树并添加每个节点的成本

修改分区方法以返回(p+r)/2也很容易


提示:一个简单的方法是拆分链接,考虑引用相关的部分。你的问题的答案是下一节的下一个段落。链接可以断开,考虑引用相关的部分。你的问题的答案是下一节的下一个段落。