在插入新项目线性时间O(n)时对数组进行排序?

问题描述 投票:0回答:1

如何在插入新元素时对数组进行排序?首先是 空的。当我添加新项目时,它将被排序。我可以吗 插入O(n)时空?

time-complexity complexity-theory space-complexity
1个回答
0
投票

环绕数组1,然后在现有元素之间插入元素(a[i] < new <= a[i+1],这是第一个位置a[i] < new)。然后,在插入新元素的位置之后,将数组中的每个现有元素移动一个索引(a[j+1] = a[j] for j > i)。使用临时变量在数组移动时保持浮动值。也可以稍作更改以向后迭代,然后不需要显式的temp变量,因为在插入之前已完成了移位。

每个单个元素的插入因此为O(n),对于n个插入而言,其<< O(n * n)总和。 1即使需要创建一个新数组,例如在具有固定数组大小的语言中,空格也为O(2n),与O(n)相同。无论移动现有元素或分配新数组并复制所有元素,Big-O的时间复杂度都保持不变。

可以通过预先分配数组结构中的松弛空间来“摊销”空间分配成本。这仅是实现方面的关注。使用二进制搜索找到插入点不会改变“最坏情况”的Big-O界限:请考虑何时插入总是发生在第一个索引处。
© www.soinside.com 2019 - 2024. All rights reserved.