C# 气泡排序算法的空间复杂度

C# 气泡排序算法的空间复杂度,c#,java,c++,algorithm,complexity-theory,C#,Java,C++,Algorithm,Complexity Theory,我正在尝试对冒泡排序算法的空间复杂度进行研究,我知道冒泡排序算法的空间复杂度为O(1)给定下面的冒泡排序算法,我如何更改冒泡排序aalgorthim代码,使空间或内存复杂度为O(n)或O(n平方),等等,我需要了解空间复杂性在哪里起作用…谢谢 public void bubbleSort(int[] arr) { boolean swapped = true; int j = 0; int tmp; while (swapped) { swa

我正在尝试对冒泡排序算法的空间复杂度进行研究,我知道冒泡排序算法的空间复杂度为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;
            }
        }
    }
public void bubbleSort(int[]arr){
布尔交换=真;
int j=0;
int tmp;
while(交换){
交换=假;
j++;
对于(int i=0;iarr[i+1]){
tmp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=tmp;
交换=真;
}
}
}

如果要增加空间复杂度,只需浪费内存即可,例如添加一些代码以使用更多内存


空间复杂度是衡量算法需要多少额外内存的一个指标


如果要分配一个大小为n的额外数组(当n是输入数组的可变大小时),则空间复杂度将是
O(n)

在一般排序算法中,空间复杂度为O(1)。这是一件好事

如果您将输入复制到另一个数组,那么如何浪费更多内存。时间复杂度是相同的,您只需添加O(N),但现在,您需要O(N)内存,因为您需要为每个位置分配空间


例如,对于heapsort,您需要构建一个堆。在这种情况下,您需要使用更多内存。

我认为这是一个值得回答的问题,因为它有一些关于大O符号的输入:


您的算法已经是
O(n)
O(n^2)
space

这是因为
O(1)
O(n)
的子集,两者都是
O(n^2)

为什么会这样?
请注意,
O(f(n))
是一组具有“f(n)的渐近上界”(直观定义,而非形式)的函数


因此,对于每个
g(n),您的算法已经是O(n)空间,因为您至少需要n个内存单元

这里,您的算法的空间复杂度是O(n),辅助空间复杂度是O(1)

一般来说,我们会比较辅助复杂性。为什么

合并排序需要O(n)个辅助空间,插入排序需要O(1)个辅助空间,但这两种排序算法的空间复杂度是O(n)。

冒泡排序(A,n)
对于(i=n;i>=1;i--)
对于(j=1;ja[j+1])
{

t代码意味着算法中的指令,或者我应该增加数据吗?谢谢,你不应该增加内存使用量,除非它提高了性能,并且你需要这种改进,或者在这种情况下,出于兴趣。如果你想增加内存使用量作为O(N),请在开始时添加
arr.clone()
。或者为O(N^2)您可以在第一个循环中添加。对于O(N^3),将其添加到嵌套循环中。确切地说,要增加空间复杂性(使用大O表示法),您无需执行任何操作。O(1)是O(N)的子集。对于大θ符号,答案当然很好。你不能就地构建堆?@Cruncher你可以,但对于heapsort,你需要将其弹出并添加到数组的前面。最简单的方法是使用一点额外的内存。“通常排序算法的空间复杂度为O(1)。”。为什么?快速排序不是O(1)(它是O)(logn)表示堆栈)。合并排序为O(n)。@amit快速排序和合并排序有O(1)个实现,但您对标准实现的看法是正确的,这些也是需要超过O(1)个内存的好例子。您的算法已经是
O(n)
space。请注意
O(1)
O(n)的子集
No,她的算法不需要任何“额外”内存,排序在同一个未排序的数组中进行!因此根据我的理解,这是O(1)wrt空间复杂度。
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
       }