Java 排序复杂性

Java 排序复杂性,java,sorting,complexity-theory,bubble-sort,Java,Sorting,Complexity Theory,Bubble Sort,给定一个数组,其中偶数索引中的值是递增的,而奇数索引中的值是递减的。例如: [1,99,16,65,45,23,97] 我考虑过两种不同的分类方法: 从i=0,j=a开始。长度-2和 比较a[i]和a[j]的值。如果a[i]更小,则i+=2;如果a[j]更小,则j-=2。需要一个额外的数组。时间是O(n),空间是O(n) 颠倒索引为奇数的元素的顺序,然后对整个数组进行气泡排序。空间是O(1)。。时间呢 哪个更有效?最坏情况下,每种情况的时间和空间复杂度是多少?冒泡排序可能需要更长的时间,不是吗

给定一个数组,其中偶数索引中的值是递增的,而奇数索引中的值是递减的。例如:

[1,99,16,65,45,23,97]
我考虑过两种不同的分类方法:

  • 从i=0,j=a开始。长度-2和 比较a[i]和a[j]的值。如果a[i]更小,则i+=2;如果a[j]更小,则j-=2。需要一个额外的数组。时间是O(n),空间是O(n)

  • 颠倒索引为奇数的元素的顺序,然后对整个数组进行气泡排序。空间是O(1)。。时间呢


  • 哪个更有效?最坏情况下,每种情况的时间和空间复杂度是多少?冒泡排序可能需要更长的时间,不是吗?

    我还没有看到真实场景中冒泡排序的良好用例。如果您使用选项二,一旦您翻转奇数索引中的单元格,您就有了一个数组,该数组可以自行排序,也可以自行排序,并应用O(n2)气泡排序。一个微不足道的改进是使用快速排序或合并排序并获得O(n log(n))时间复杂度。

    我想如果您尝试进一步改进您的第一个算法,您可以重用相同的数组(因此是O(1)空间)并仍然获得O(n)时间。我尝试使用临时变量存储“about the be replacement”单元格,但它遇到了问题,所以我认为这是不可能的你说有问题是什么意思?怎么搞的?如果可能的话,发布你的代码。我现在没有代码,但是,例如:我从比较1和23开始->1更小,所以我把它推到[0],现在I=2。我在“temp”中保持99,并不断比较。当我继续往下看时,数组的填充速度比比较快,而且仅使用一个临时变量是不够的。。也许有两个?我不知道。在选项2中,数组没有“几乎排序”?(=O(n))@Osh24不一定。考虑下面这样的事情:[ 900, 1000, 901,950, 902, 1 ]。即使在翻转了一半索引之后,冒泡排序也不太吸引人。翻转了奇数索引之后,我们得到[900 1 901 950 902 1000],然后只需要两次排序就可以得到正确的结果,这非常吸引人,不是吗?。。问题是,关于这个问题和数组的构造方式,它是否可以是O(n)和冒泡排序?无论如何,这就是我设法做到的:建议?我敢肯定是O(n)。