考虑一个未排序的列表9,3, 5 ,3,9,其中5为枢轴。当比较索引0和索引4处的元素时,它们的值彼此相等,并且两者都大于枢轴值。在这种情况下会发生什么?它们无法交换,因为“小于”部分仍然会有9。其中一个刚刚转移到另一边。对于3来说也是如此。他们会怎么样?
答案 0 :(得分:2)
这些元素不会相互比较。在Hoare分区方案中,从左侧扫描阵列以获得第一个元素>枢轴,然后从右边扫描第一个元素<枢。这意味着第一次交换将用于数组[0] = 9,其中数组[3] = 3.之后不再发生交换。根据Hoare分区实现和数据模式,pivot元素最终可以作为左分区的最后一个元素或作为右分区的第一个元素。等于pivot的元素在左侧或右侧分区中保留,并在以后的递归中处理。
答案 1 :(得分:1)
在Hoare partition scheme中,存在一个情况,其中两个索引在比较相等的项目处停止:两者都等于 pivot 。交换项目可确保此类项目的数量在生成的分区中最多相差一个(或者,取决于分区之外的枢轴处理,完全相等)。