algorithm - 分区元素

标签 algorithm partitioning

我正在尝试理解以下文字:

给你一个列表,它刚刚使用标准分区算法进行了分区。你要说哪个元素可能是分区元素。例如,给定数字 [7, 6, 8, 20, 11, 5, 14],那么只有 8 可能是分区元素,算法将继续对 [7, 6] 和 [20, 11, 5, 14].

我想了解 8 是这里的分隔元素吗?谢谢

最佳答案

在快速排序迭代结束时,主元 p(分区元素)左侧的每个元素都必须小于 p,而右侧的每个元素都必须大于 p。这意味着 p 现在处于其最终排序位置。快速排序算法在两个结果子数组(左和右)上递归进行。

在快速排序过程中给定数组的配置,您可以使用这个简单的二次过程识别可能已在上一次迭代中使用的主元:

foreach int m in the array
  if (all int l on the left of m verify l < m)
    AND (all int r on the right of m verify r >= m)
  then
    m was a possible pivot in the previous iteration

你可以做得比 O(n^2) 更好,但这是基本思想。

关于algorithm - 分区元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40678543/

相关文章:

java - 我怎样才能使这个 Java 片段更有效率?

mysql - 组合数据以生成图形中的路线。从哪儿开始?

arrays - 查找两个数组是否包含相同的整数集而没有额外的空间并且比 NlogN 更快

mysql - 使用alter table添加分区失败

partitioning - 我们真正可以在 ESP32 中使用多少 NVS 数据?

windows - Diskpart脚本删除所有分区

java - 添加存储在字符串变量中的数字

algorithm - 何时停止凝聚层次聚类 - 停止标准

sql - 在 SQL Server 中对大表进行分区的最佳方法是什么?

algorithm - 如何以最小化每个分区总和的最大值的方式对整数数组进行分区?