Algorithm 关于快速排序杀手

Algorithm 关于快速排序杀手,algorithm,code-analysis,quicksort,Algorithm,Code Analysis,Quicksort,你们中的一些人可能偶然发现了这篇可爱的文章-\ 真正有趣的是,他如何修复快速排序以在O(N log N)中针对定义的对手执行 快速排序可能会选择中间元素作为每个步骤的轴心,因此总是将输入序列完美地分割为两半。中位数可以在O(N)运行时间中确定,因此总运行时间始终为O(N logn) 我的问题是,线性时间中值查找算法是否会使用相同的比较函数,并在O(N^2)而不是O(N)中执行 编辑: 准确地说:我在质疑基于分区的中值选择算法的复杂性,该算法使用了与快速排序类似的策略,它将使用与快速排序相同的比较

你们中的一些人可能偶然发现了这篇可爱的文章-\

真正有趣的是,他如何修复快速排序以在O(N log N)中针对定义的对手执行

快速排序可能会选择中间元素作为每个步骤的轴心,因此总是将输入序列完美地分割为两半。中位数可以在O(N)运行时间中确定,因此总运行时间始终为O(N logn)

我的问题是,线性时间中值查找算法是否会使用相同的比较函数,并在O(N^2)而不是O(N)中执行

编辑:

准确地说:我在质疑基于分区的中值选择算法的复杂性,该算法使用了与快速排序类似的策略,它将使用与快速排序相同的比较函数。它如何在O(N)模式下与这个对手合作

线性时间中位数的发现不是吗 算法最终使用相同的 比较函数并在O中执行(N^2) 而不是O(N)

不,通过添加一个O(N)函数来找到中间值,复杂性就变了

O((N+N) log N) == O(2N log N) == O(N log N)
但是,正如那篇文章所说,常数的增加使它失去了吸引力

标准技术称为中位数3,完全的中位数搜索并不能真正改善这一点


如果最坏的情况很严重,就不要使用快速排序。Shellsort具有更好的上限

当然,我明白这一点。我在质疑中值搜索算法的复杂性。线性时间中位数查找使用与快速排序类似的策略,对吗?它将使用相同的比较函数。用这个比较函数,它怎么能在O(N)中工作呢?我在维基百科上发现,中位数选择是O(N),但它并不简单。我从。我以为他们计划使用基于O(N)划分的中值选择算法。我觉得中位三分法仍然会受到对手的影响。谢谢你在任何情况下向我展示这种新方法。写得好。我投票支持Combsort,尽管边界不是文本,也不是使用introsort。两全其美。重新编辑:比较函数与复杂性无关,中值选择为O(N)。