我正在尝试研究泡沫排序算法的空间复杂度我知道泡泡排序算法的空间复杂度是O(1)给出下面的泡泡排序算法如何更改泡泡排序aalgorthim代码来制作空间或内存复杂度为O(n)或O(n平方)等我需要了解空间复杂性在哪里发挥作用...谢谢
public void bubbleSort(int[] arr) {
boolean swapped = true;
int j = 0;
int tmp;
while (swapped) {
swapped = false;
j++;
for (int i = 0; i < arr.length - j; i++) {
if (arr[i] > arr[i + 1]) {
tmp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tmp;
swapped = true;
}
}
}
答案 0 :(得分:8)
空间复杂度衡量算法需要多少额外内存。
如果要分配一个大小为n的额外数组(当n是输入数组的可变大小时),空间复杂度将为O(n)
。
答案 1 :(得分:5)
如果你想增加空间复杂性,你只需要浪费内存,例如添加一些代码以使用更多内存。
它的空间复杂度越来越低,这很难。
答案 2 :(得分:4)
我认为值得回答,因为它有一些关于大O符号的输入:
您的算法已经是O(n)
和O(n^2)
空间
这是因为O(1)
是O(n)
的子集,都是O(n^2)
为什么会这样?
请注意O(f(n))
是一组具有“f(n)的渐近上界”的函数(直观定义,而非正式)。
因此,对于每个g(n)<h(n)<f(n)
,如果h(n)
是g(n)
的渐近上界,则f(n)也是它的渐近上界。
因此,如果g(n)
位于O(h(n))
- 它也位于O(f(n))
在你的情况下,如果复杂性函数T(n)
在O(1)
中,它也在O(n)
答案 3 :(得分:2)
您的算法已经是O(n)空间,因为您至少需要n个内存单元
答案 4 :(得分:1)
Bubble sort(A,n)
for(i=n;i>=1;i--)
for(j=1;j<=i-1;j++)
if(a[j]>a[j+1])
{
t <- a[j]
a[j] <- a[j+1]
a[j+1] <- t
}
在此显示空间复杂度的输入变量和临时变量,然后i和j是其空间复杂度始终为常数且临时变量t始终显示1的输入变量,因此冒泡排序的空间复杂度为o(1)。 >
答案 5 :(得分:0)
通常,排序算法具有空间复杂度O(1)。这是一件好事
如果要将输入复制到另一个阵列,如何浪费更多内存。时间复杂度是相同的,你只需要添加O(N),但是现在你需要O(n)内存,因为你需要为每个位置分配空间。
例如,对于heapsort,您需要构建一个堆。在这种情况下,您需要使用更多内存。
答案 6 :(得分:0)
您的算法的空间复杂度为O(n),辅助空间复杂度为O(1)。
通常,我们会比较辅助复杂性。为什么?
Merge-Sort占用O(n)辅助空间,而插入排序则需要O(1)辅助空间。但这两种排序算法的空间复杂度均为O(n)。