Cormen快速排序修改分区函数

时间:2015-07-18 07:32:58

标签: algorithm time-complexity quicksort

我正在从算法简介中快速学习。我遇到了第7章Quicksort的问题7.1-2. -

"当数组A [p ... r]中的所有元素具有相同的值时,PARTITION会返回什么值?修改PARTITION,以便当>时q =⌊(p + r)/2⌋。数组A [p ... r]中的所有元素具有相同的值。"

第一部分很简单,答案肯定是r。但是我甚至无法弄清楚第二部分的问题。我的意思是将枢轴设置为(p + r)/ 2的原因是什么此外,我无法理解我在Google上搜索时找到的解决方案。

请帮助我理解这个修改的优点是什么,如果所有元素都相同,如果可能请提供算法。

1 个答案:

答案 0 :(得分:0)

通过将枢轴设置到p和r的中间,我们将大小为n的数组分成两个大小相等的子问题n / 2。如果为下一次重复绘制递归树,则会看到其高度为O(lgn)

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

想象一下,如果从分区返回的pivot的位置始终是数组中的最后一个元素。然后运行时间的重复将是

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

如果递归树就像一个链表,你现在看到它为什么效率低下?尝试绘制树并在两种情况下在每个节点上添加成本。

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

提示:一种简单的方法是在分区的if条件下拆分< =。