2.3.9请说明Quick.sort()在处理只有两种主键值的数组时的行为,以及在处理只有三种主键值的数组时的行为。
1)两种主键值时
1.1)小元素作为分界元素,子数组剩余的元素两端也是小元素时,会进行一次交换,这是不必要的交换,这个在有重复值时也会出现这种不必要的交换。
1.2)大元素作为分界元素,子数组剩余的元素两端也是大元素时,会进行一次交换,这是不必要的交换,这个在有重复值时也会出现这种不必要的交换。
1.3)在有序的情况下,仍就会递归调用,使得对比次数增加,如果一开始先找到大值,然后从两端向中移动指针,当两指值指向的元素值不同时,小值放左边,大值放右边,对比次数就是线性。
2)三种主键值时
1.1)小元素作为分界元素,子数组剩余的元素两端也是小元素时,会进行一次不必要的交换。中元素、大元素交换到子数组右边时 中元素、大元素是无序排列。
1.2)中元素作为分界元素,子数组剩余的元素两端也是中元素时,会进行一次不必要的交换。中元素、大元素交换到子数组右边时 中元素、大元素是无序排列。
1.3)大元素作为分界元素,子数组剩说的元素两端也是大元素时,会进行一次不必要的交换。小元素、中心元交换到子数组左边时 小元素、中元素是无序排列。