algorithm - 不同排序算法的空间复杂度差异

标签 algorithm sorting space-complexity

我正在尝试了解不同排序算法的空间复杂度。

http://bigocheatsheet.com/?goback=.gde_98713_member_241501229
从上面的链接我发现 冒泡排序、插入排序和选择排序是O(1)
其中快速排序是 O(log(n)),归并排序是 O(n)。

我们实际上并没有在任何算法中分配额外的内存。 那为什么用同一个数组排序,空间复杂度不一样呢?

最佳答案

当您运行代码时,内存以两种方式分配:

  1. 隐含地,在您设置函数调用时。

  2. 明确地说,当您创建内存块时。

快速排序是隐式使用内存的一个很好的例子。当我进行快速排序时,我在最坏的情况下递归调用自己 O(n) 次,在一般情况下调用 O(log(n)) 次。这些递归调用每个都占用 O(1) 空间来跟踪,导致 O(n) 最坏情况和 O(log(n)) 平均情况。

合并排序是显式使用内存的一个很好的例子。我采用两个已排序数据 block ,创建一个放置合并的位置,然后将这两个数据 block 合并到该合并中。创建放置合并的位置是 O(n) 数据。

要降低到 O(1) 内存,您需要既不分配内存,又不递归调用自己。这适用于所有冒泡排序、插入排序和选择排序。

关于algorithm - 不同排序算法的空间复杂度差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36363550/

相关文章:

java - 检查数组的降序

python - 按最后 4 位数字升序排列字典的值

python - 在 Python 中按另一个数组对数组的行进行排序

python - 为什么我不能在 pandas 函数中应用 shift?

c# - 查找总和最接近给定值的元素

python - 在 Python 中操作变量

java - 按日期对 HashMap 进行排序

java - 在 O(1) 额外空间和 O(n) 时间内计算数组中所有元素的频率

arrays - 如何在 O(n) 运行时间和 O(1) 空间复杂度内重组数组?

c - 算法时间和空间复杂度