Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 如果数组的元素数为偶数,则该值将变为;“完美”;快速排序的轴心?_Sorting - Fatal编程技术网

Sorting 如果数组的元素数为偶数,则该值将变为;“完美”;快速排序的轴心?

Sorting 如果数组的元素数为偶数,则该值将变为;“完美”;快速排序的轴心?,sorting,Sorting,假设我们有一个数组,它由-5,1,-9,-3组成。我假设完美枢轴是将数组划分为两个相等子数组的枢轴,但这仅适用于元素数为奇数的数组。据我所知,在这种情况下,完美的支点可能是-3或1,因为它们不是具有最低或最高值的元素。在许多情况下,多个支点都同样好。此外,如果使用三个路径细分,其中所有与枢轴相等的项目被分组在中间,则枢轴的最优选择将不仅仅取决于枢轴上方和下方的元素数量,而且还取决于它们的值分布。例如,给定[1,2,2,3,4,5,6,7],中值为3,但围绕3旋转需要在左侧进行一次旋转操作,在右侧

假设我们有一个数组,它由-5,1,-9,-3组成。我假设完美枢轴是将数组划分为两个相等子数组的枢轴,但这仅适用于元素数为奇数的数组。据我所知,在这种情况下,完美的支点可能是-3或1,因为它们不是具有最低或最高值的元素。

在许多情况下,多个支点都同样好。此外,如果使用三个路径细分,其中所有与枢轴相等的项目被分组在中间,则枢轴的最优选择将不仅仅取决于枢轴上方和下方的元素数量,而且还取决于它们的值分布。例如,给定[1,2,2,3,4,5,6,7],中值为3,但围绕3旋转需要在左侧进行一次旋转操作,在右侧进行两次旋转操作,而围绕4旋转则只需要在每侧进行一次额外操作。

霍尔分区方案分区步骤可以在任何位置结束枢轴元素,因此,它不会从递归调用中排除任何元素,并且可以处理偶数个元素。忽略运行时问题,奇数大小可以使用Lomuto方案处理,其中pivot被排除,偶数大小可以使用Hoare处理,其中pivot被保留在任一子分区的某个位置。我不知道如何在不影响运行时间的情况下选择一个“完美”的轴。但是子数组[1,2,2,2]是否会被旋转不止一次,因为快速排序并没有真正比较子数组中的值?@Martynas:Quicksort的一个增强功能是进行一个三向分区,涉及的元素少于轴,等于轴,而且比枢轴大。旋转[1,2,2,2,3]将其拆分为[1]、[2,2,2]和[3]。第一组和第三组的长度仅为一个元素,而第二组仅包含一个值(等于轴)。因此,这些组都不需要任何进一步的操作。但是,如果发出三向分区,那么在每个数组中旋转的次数将相等,对吗?