Algs4-2.2.3快速排序中最大的元素最多交换次数

 2.3.3对于长度为N的数组,在Quick.sort()执行时,其最大的元素最多会被交换多少次?
答:
1)上取整((N-1)/2)次。

2)为便于描述,令v为切分元素,M为最大元素。
由于M在每一次切分时都将从参与切分的子数组的左边交换到右边,那么切分次数越多M被交换的次数也越多。要完成最多次的切分就需要保证每次切分后右子数组长度最长,同时要确保M不作为v元素出现或只是M在最后一次交换时为v出现(v元素只交换一次),要实现上述要求就要M在v的右边第一个位置上,并且M在后续交换后在下一个v的右边第一个位置上。那么M每次被交换最多只向右边移动两个位置,那么可供M移动的长度为N-1,在N>2的情况,一开始M在第二个位置,每次交换向右最多移动两个位置,那么 上取整(N-1)/2是最大元素的交换次数。

3)排列:
令N个元素的元素值如下,且有如下不等关系:
V1a < V1<V2a< V2< V3a< V3< V4a< V4<V5a< V5< V6a< V6<…<M
令C(N)为数组长度为N时M元素的最多交换次数的函数。
C(0)=0
C(1)=0

C(2)=1
0)M,V1
1)V1,M(交换M)

C(3)=1
0)V1,M,V1a
1)V1,V1a,M (交换M) 
2)V1a,V1,M

C(4)=2
0)V1,M,V1a,V2
1)V1,V1a,M,V2(交换M)
2)V1a,V1,M,V2
3)V1a,V1,V2,M(交换M)

C(5)=2
0)V1,M,V2,V1a,V2a
1)V1,V1a,V2,M,V2a(交换M)
2)V1a,V1,V2,M,V2a
3)V1a,V1,V2,V2a,M(交换M)
4)V1a,V1,V2a,V2,M

C(6)=3
0)V1,M,V2,V1a,V2a,V3
1)V1,V1a,V2,M,V2a,V3(交换M)
2)V1a,V1,V2,M,V2a,V3
3)V1a,V1,V2,V2a,M,V3(交换M)
4)V1a,V1,V2a,V2,M,V3
5)V1a,V1,V2a,V2,V3,M(交换M)

C(7)=3
0)V1,M,V2,V1a,V3,V2a,V3a
1)V1,V1a,V2,M,V3,V2a,V3a(交换M)
2)V1a,V1,V2,M,V3,V2a,V3a
3)V1a,V1,V2,V2a,V3,M,V3a(交换M)
4)V1a,V1,V2a,V2,V3,M,V3a
5)V1a,V1,V2a,V2,V3,V3a,M(交换M)
6)V1a,V1,V2a,V2,V3a,V3,M

C(8)=4
0)V1,M,V2,V1a,V3,V2a,V3a,V4
1)V1,V1a,V2,M,V3,V2a,V3a,V4(交换M)
2)V1a,V1,V2,M,V3,V2a,V3a,V4
4)V1a,V1,V2,V2a,V3,M,V3a,V4(交换M)
5)V1a,V1,V2a,V2,V3,M,V3a,V4
6)V1a,V1,V2a,V2,V3,V3a,M,V4(交换M)
7)V1a,V1,V2a,V2,V3a,V3,M,V4
8)V1a,V1,V2a,V2,V3a,V3,V4,M(交换M)

原文地址:https://www.cnblogs.com/longjin2018/p/9860186.html