我正在阅读有关QuickSort的内容,理想情况下,他们使用随机算法选择一个至少有25-75分割阵列的枢轴。 为什么他们无法计算数组的中值并在每次递归调用中选择最接近中值的值?
我认为这需要相同的运行时间,甚至可能比随机方法更好。
答案 0 :(得分:0)
因为计算中值至少需要线性时间(与随机选择所需的恒定时间相比),并且在线性时间内并不是微不足道的。因此,即使渐近性能得到保证,挂钟性能也会降低。我认为以其他方式保证性能更为实际,例如:使用Introsort。
答案 1 :(得分:0)
使用中位数中位数,可以选择接近中位数,但开销很大,有效地对5组进行排序。维基文章:
https://en.wikipedia.org/wiki/Median_of_medians
请注意,中位数的中位数可以实施。
对于随机数据透视,计算随机索引的代码在分区步骤中需要花费大量时间。
一种更简单的方法是使用first,middle,last的中位数来避免已经排序或反向排序的数据的最坏情况时间,并且由yeputons回答,使用转换为堆排序的introsort(基于递归级别) )避免最坏的情况。