算法导论 — 思考题7-2 针对相同元素值的快速排序

针对相同元素值的快速排序)在7.4.2节对随机化快速排序的分析中,我们假设输入元素的值是互异的。在本题中,我们将看看如果这一假设不成立会出现什么情况。
  a. 如果所有输入元素的值都相同,那么随机化快速排序的运行时间会是多少?
  b. PARTITION{\rm PARTITION}过程返回一个数组下标qq,使得A[p..q1]A[p..q-1]中的每个元素都小于或等于A[q]A[q],而A[q+1..r]A[q+1..r]中的每个元素都大于A[q]A[q]。修改PARTITION{\rm PARTITION}代码来构造一个新的PARTITION(A,p,r){\rm PARTITION’}(A, p, r),它排列A[p..r]A[p..r]的元素,返回值是两个数组下标qqtt,其中pqtrp ≤ q ≤ t ≤ r,且有
  • A[q..t]A[q..t]中的所有元素都相等
  • A[p..q1]A[p..q-1]中的每个元素都小于A[q]A[q]
  • A[t+1..r]A[t+1..r]中的每个元素都大于A[q]A[q]
  与PARTITION{\rm PARTITION}类似,新构造的PARTITION{\rm PARTITION’}的时间复杂度是Θ(rp)Θ(r-p)
  c.RANDOMIZEDPARTITION{\rm RANDOMIZED-PARTITION}过程改为调用PARTITION{\rm PARTITION’},并重新命名为RANDOMIZEDPARTITION{\rm RANDOMIZED-PARTITION’}。修改QUICKSORT{\rm QUICKSORT}的代码构造一个新的QUICKSORT(A,p,r){\rm QUICKSORT’}(A, p, r),它调用RANDOMIZEDPARTITION{\rm RANDOMIZED-PARTITION’},并且只有分区内的元素互不相同的时候才做递归调用。
  d.QUICKSORT{\rm QUICKSORT’}中,应该如何改变7.4.2节中的分析方法,从而避免所有元素都是互异的这一假设?
  
  
  a.  
  如果数组的所有元素都相同,那么随机化快速排序每次递归产生一个最不均衡的划分,因此运行时间为Θ(n2)Θ(n^2)
  
  b.
  算法导论 — 思考题7-2 针对相同元素值的快速排序
  c.
  算法导论 — 思考题7-2 针对相同元素值的快速排序
  d.
  笔者还没想明白,希望有高手来解答。
  
  代码链接:https://github.com/yangtzhou2012/Introduction_to_Algorithms_3rd/tree/master/Chapter07/Problem_7-2/SameElemQuickSort