在快速排序中,如果我们总是将左侧部分拆分为大小a
,而右侧部分拆分为大小(n-1-a)
,那么递归树的最小高度和最大高度是多少?
答案 0 :(得分:1)
当输入数组已经已经排序(以非降序或非升序)并且我们总是选择第一个或最后一个元素作为快速排序最坏的情况时发生ivot(分区不是随机的)。
以输入数组为例:
[1,2,3,4,5]
假设我们选择最左边的元素作为枢轴。因此,递归树的构建就像:
n
/ \
1 n-1(2,3,4,5)
类似地,将2作为枢轴拾取,制作树:
n
/ \
1 n-1(2,3,4,5)
/ \
1 n-2(3,4,5)
观察图案,在每个级别上树的高度将为 O(N) 分区算法将花费 O(N)时间,导致总时间= O(N ^ 2)
递归树的最佳高度为 O(logN),这通常发生在中位数(中间元素)始终被选作枢轴时。