C 理解快速排序算法及其最坏情况

C 理解快速排序算法及其最坏情况,c,quicksort,C,Quicksort,我想我知道快速排序算法。但我需要帮助找出最坏的情况 让我们看看下面的快速排序代码----> 问题1.我对快速排序的理解正确吗 问题2.在最坏的情况下,快速排序不进行n-1+n-2+……+1比较。如何进行 在这里,我想它会有n+2比较,而不是n-1。 分区将检查 (1<=1,i++),(5>1,j--), (2<=1,don't incr i),(4>1,j--), (3>1,j--), (2>1,j--), (1>1,don't incr j) (11

我想我知道快速排序算法。但我需要帮助找出最坏的情况

让我们看看下面的快速排序代码---->

问题1.我对快速排序的理解正确吗

问题2.在最坏的情况下,快速排序不进行n-1+n-2+……+1比较。如何进行

在这里,我想它会有n+2比较,而不是n-1。 分区将检查

(1<=1,i++),(5>1,j--),
(2<=1,don't incr i),(4>1,j--),
(3>1,j--),
(2>1,j--),
(1>1,don't incr j)
(11,j-),

(2使用您显示的算法,轴始终被选为数组的第一个元素。假设您得到一个已排序的数组,在这种情况下,轴将转到第一个元素(原样)在与它进行比较后,您将递归地调用两个数组的快速排序,第一个数组包含轴之前的元素(0个元素,一个空数组),另一个数组包含轴之后的所有元素(n-1个元素)。在这种情况下,您将得到一个递归调用,使用一个包含
n-1
元素的数组进行快速排序,该数组碰巧再次排序,第一个元素(新枢轴)将生成一个包含0个元素的数组(枢轴之前)、枢轴和一个包含
n-2
元素的数组。是否遵循顺序

<> p>因为你的代码中最坏的情况恰好是已经排序的数组,通常Quask排序只是把中间的元素作为枢轴,所以在这种情况下它也不做任何事情,但是每次都在半尺寸数组中退化(一半大小减去一个-枢轴)。
在这种情况下,你得到了一个退化的情况,就像前面一样,你在第一个过程中得到了n个比较,然后是n-1个比较,然后是n-2个比较,总共是n*(n+1)/2个比较,如果你每次除以2,你在每个过程中得到n个比较,总共是log_2(n)个过程,那么n*log_2(n)的总数是多少比较。假设n=1000000,在第一种情况下进行100001000000/2=200000500000比较,在20*1000000=20000000(少得多)前面进行比较。

在这种情况下,轴心将转到第一个元素(原样)在比较了n-1个元素之后,我不明白n-1个元素是如何在每次传递时比较所有n个元素的,但是在退化的情况下,对于log_2(n),会得到n个传递在我文章的最后一部分中,我已经展示了比较是n+2而不是n-1。在每个过程中,对于一个包含n个元素的数组,您将n-1个元素与枢轴进行比较,因此您可以进行n-1个比较。如果您将数组划分为子数组,您将每个子数组(长度为n_i)n_i-1个比较,总计$\sum_{i=0}^{i0 4 0 partion swaps 1 with 1 and returns 0 which is assigned to m low high m __________________________ 0 0 * 0 4 0 low high m ___________________________ 0 0 * 1 4 1 partition swaps 2 with 2 0 4 0 low high m ____________________________ 2 4 2 partition swaps 3 with 3 1 4 1 0 4 0 low high m ____________________________ 2 1 * 2 4 2 1 4 1 0 4 0 low high m ______________________________ 3 4 3 partition swaps 4 with 4 2 4 2 1 4 1 0 4 0 low high m ________________________________ 3 2 * 3 4 3 2 4 2 1 4 1 0 4 0 low high m _________________________________ 4 4 * 3 4 3 2 4 2 1 4 1 0 4 0 low high m _________________________________ Stack empty low high m
(1<=1,i++),(5>1,j--),
(2<=1,don't incr i),(4>1,j--),
(3>1,j--),
(2>1,j--),
(1>1,don't incr j)