关于算法:一般情况下需要进行多少次交换快速排序才能对数据进行排序?

how many swap quicksort take to sort data in avg case?

我对stakoverflow的两个答案感到困惑,

我的问题是在平均情况下需要进行多少交换快速排序才能对数据进行排序?

有些链接说平均(1/3)nln(n)交换

链接1(第一个答案-"分析抽象的基本操作")

参考链接2(幻灯片中的第20页)

其他链接建议平均交换1 * n * ln(n)

链接1

ref链接2(在最后-"作为摘要")

我想知道哪个是正确的?


根据您上一个链接得出的结论是:

We assume that average number of swaps during one iteration is 1/2?(n-1). It means that in average one half of elements is swapped only.

首先,似乎他们所说的交换数是写数而不是交换数。因此,根据他们的假设,交换的总数应为(1/2)?n?ln(n)。其次,我认为这个假设是不正确的(如果支点始终是中位数而不是随机选择,那将是正确的。)

假设数组{x 1 ,x 2 ,...,x n }是{1,2的随机排列,...,n}和z是随机选择的枢轴。快速排序算法第一次迭代期间的交换次数是{1,...,n}中索引i的数目,这样i <= z和x i > z。因此,该数字的预期值为:

k = 1 ... n (P(z = k)?∑ 1≤i≤k (P(x 1 > k)))
=(1 / n)?∑ k = 1 ... n (∑ 1≤i≤k ((n-k)/ n))
=(1 / n)?∑ k = 1 ... n (k?(n-k)/ n)
=(1/6)(n-1)(n 1)/ n
≈n / 6

并且由于平均迭代次数为2?ln(n),所以交换的总数为(1/3)?n?ln(n)。