Algorithm “快速排序”从nlgn转换为n2的切点是什么?
我知道算法的最坏情况——当元素已经排序或所有元素都相同时,但我想知道算法从nlgn复杂度移动到n2的点。这取决于我们如何选择轴 一种观点认为,当所有元素都已排序时。嗯,这不是100%正确。在这种情况下,如果我们选择第一个元素作为轴心,复杂性将变为N^2 既然我们有 TN=TN-1+cN N>1,如果你擅长基础数学,那么:Algorithm “快速排序”从nlgn转换为n2的切点是什么?,algorithm,sorting,Algorithm,Sorting,我知道算法的最坏情况——当元素已经排序或所有元素都相同时,但我想知道算法从nlgn复杂度移动到n2的点。这取决于我们如何选择轴 一种观点认为,当所有元素都已排序时。嗯,这不是100%正确。在这种情况下,如果我们选择第一个元素作为轴心,复杂性将变为N^2 既然我们有 TN=TN-1+cN N>1,如果你擅长基础数学,那么: T(N) = O(N^2) 如上所述,这取决于我们如何选择轴。虽然在一些教科书中,它主要选择了第一个支点,但没有重新开始 一种流行的方法是:三个分区的中值。它选择[left
T(N) = O(N^2)
如上所述,这取决于我们如何选择轴。虽然在一些教科书中,它主要选择了第一个支点,但没有重新开始
一种流行的方法是:三个分区的中值。它选择[left]、[right]和[left+right/2]的中值。当所选轴未分割数组时,快速排序的最坏情况发生。例如,如果我们每次都选择第一个元素作为轴心,并且数组已经排序,那么数组根本不会被分割。因此复杂性在^2上 为了避免这种情况,我们将轴的索引随机化。假设pivot将数组拆分为两个大小相等的部分,则在log n上的复杂性为
有关精确分析,请参见中的“形式分析”部分,它的性能最差,即 在^2上 在下列情况下 如果列表已排序,且pivot是第一个元素 若列表按相反顺序排序,且轴是最后一个元素。 如果列表中的所有元素都相同。在这种情况下,轴选择无关紧要。
注意-如果选择pivot作为中间值,则“已排序”不可能是最坏的情况。当元素已排序时。。。。您选择的轴心点总是第一个或最后一个元素。是否有一个特定的转换点发生?