Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 快速排序在已排序列表上花费的时间更长_Algorithm_Sorting - Fatal编程技术网

Algorithm 快速排序在已排序列表上花费的时间更长

Algorithm 快速排序在已排序列表上花费的时间更长,algorithm,sorting,Algorithm,Sorting,我运行了一些测试,发现快速排序实际上运行得越慢,列表排序越多,这与直觉相反!我读过维基百科上的快速排序算法,但我不太明白为什么一个列表排序越多,所需时间就越长。任何帮助都将不胜感激 非随机快速排序通常会选择第一个元素作为轴心元素;当列表已排序时,这将导致列表拆分为一个空的左侧列表和一个包含n-1个元素的右侧列表。在每个递归调用中都会发生相同的行为,总运行时间为n+n-1+n-2+…+1=在^2上。您所指的是一个众所周知的快速排序问题。解决此问题的一种方法是使用第一个元素以外的元素作为轴心元素 通

我运行了一些测试,发现快速排序实际上运行得越慢,列表排序越多,这与直觉相反!我读过维基百科上的快速排序算法,但我不太明白为什么一个列表排序越多,所需时间就越长。任何帮助都将不胜感激

非随机快速排序通常会选择第一个元素作为轴心元素;当列表已排序时,这将导致列表拆分为一个空的左侧列表和一个包含n-1个元素的右侧列表。在每个递归调用中都会发生相同的行为,总运行时间为n+n-1+n-2+…+1=在^2上。

您所指的是一个众所周知的快速排序问题。解决此问题的一种方法是使用第一个元素以外的元素作为轴心元素

通常,此StackExchange条目对快速排序有很好的描述:

本文将更深入地讨论已经排序的列表的问题,以及实现快速排序以处理此类异常的方法。

如果需要帮助,请发布代码。我还认为这个问题更适合于。基本上,在排序列表上,快速排序会在开始时对列表进行洗牌。wikipedia文章的这一特定部分解释了最坏情况下的计算,如果你想保证Onlogn,使用中位数作为轴selection@Daniel-如果您想保证登录n,那么使用mergesort或heapsort更有意义。中间值的中值可能会给你一个渐进的保证,我没有仔细检查过,但它很复杂,常数因子会很差。@Steve314,我知道有一些开销,但实际上我从未使用过它,我不知道有多少。谢谢你的提示: