Java MergesSort和实际计算的作业在哪里?

Java MergesSort和实际计算的作业在哪里?,java,big-o,variable-assignment,mergesort,Java,Big O,Variable Assignment,Mergesort,假设我们有一个大小为10的升序数组,从1->10。 我理解数组的拆分,但我似乎不理解什么时候发生赋值。以下是我目前对其含义的解释: (1) 1,2,3,4,5,6,7,8,9,10 (2) 1,2,3,4,5 6,7,8,9,10 (3) 1,2 3,4 5 6,7 8,9 10 (4) 1 2 | 3 4 | 5 | 6 7 | 8 9 | 10 (5) 1,2 3,4 5 6,7

假设我们有一个大小为10的升序数组,从1->10。 我理解数组的拆分,但我似乎不理解什么时候发生赋值。以下是我目前对其含义的解释:

  (1) 1,2,3,4,5,6,7,8,9,10
  (2) 1,2,3,4,5     6,7,8,9,10
  (3) 1,2  3,4  5     6,7   8,9  10
  (4) 1  2  |  3  4  |  5     |  6   7 | 8   9  | 10
  (5) 1,2    3,4       5         6,7      8,9     10
  //(5.5) 1,2,3,4   5          6,7,8,9    10
  (6)  1,2,3,4,5        6,7,8,9,10
  (7)  1,2,3,4,5,6,7,8,9,10

我不确定我们是从第5步到第6步,还是执行第5.5步。除此之外,我假设步骤5有10个作业,步骤6有10个以上的作业,步骤7有10个以上的作业,总共30个作业。我相信这肯定是错误的,因为我不确定步骤2、3、4是否也算在内,或者我是否从一开始就算上了作业。谢谢你的帮助

您应该计算比较。比较的数量最多的是log N

您如何知道OP应该计算比较而不是赋值?因为OP标记了大o,并且不确定要计算什么。要计算变量赋值,我们必须知道这个特定的mergesort实现如何使用变量。即使我们只计算对数组元素的赋值,实现也很重要,例如,一个实现可能会尝试重用数组,或者在每个步骤中使用一个新数组,这显然会影响赋值的数量。它甚至取决于输入,在这种情况下为0分配,因为1到10已经排序。但是合并数组不算作分配吗?假设它是一个通用的递归合并排序。如果计算赋值,我会假设就地排序,并将交换值计算为3个赋值。最坏的情况是30*3,3=100个作业。但是拿8到16个项目来看看模式。这更容易,因为每次合并时的大小都是相同的。术语赋值只适用于单个变量或数组元素。当然,任何mergesort实现都会分配变量,但需要多少分配取决于它的实现方式。知道它是泛型的和递归的并不足以计算赋值。