big-o - 最坏情况快速排序的大O时间复杂度?

标签 big-o quicksort

我认为我理解的内容。
在最坏的情况下,快速排序算法会为每个递归调用选择列表/数组中最大或最小的键进行排序(如果是递归实现)。我知道n的大小将决定递归调用的次数和比较的次数(每递归一步就会减少1)。所以我们总共有 n+(n-1)+(n-2)+...+2+1 次原始比较。

我不明白。
我不太明白的是这是怎么O(n^2)?就像我知道它至少是 O(n^2) 作为 n+(n-1)+(n-2)+...+2+1 < n^2 但我怎么知道它不是说 O (n*logn)?我是否必须证明该结果才能安全地确认它是 O(n^2) 还是以我看不到的方式立即显而易见?我想一般来说我怎么知道我已经找到了代表大 O 时间复杂度的最低函数。

最佳答案

n+(n-1)+(n-2)+...+1 = n(n+1)/2(可以通过数学归纳法证明),显然是O(n^2)。

https://en.wikipedia.org/wiki/1_%2B_2_%2B_3_%2B_4_%2B_%E2%8B%AF

关于big-o - 最坏情况快速排序的大O时间复杂度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37771460/

相关文章:

algorithm - 您将如何找到该算法的复杂性?

C++ std::sort 实现

c++ - 为什么我的快速排序对大于 ~35000 的数组不起作用? (C++)

mysql - mysql中如何根据时区平均分配用户帐户?

c - for 循环中 n * n * n 次迭代的时间复杂度是多少?

algorithm - 这种重复可以有多少个子问题,同时仍然比初始重复更快?

java - 计算快速排序中的比较和交换

c++ - Quicksort - 最坏情况导致堆栈溢出?

java - 递归解决方案的 Big-O 复杂度

java - 大 O 符号 O(NM) 或 (N^2)