以big-O表示法插入排序链接列表的复杂性是多少?假设我有5个元素,插入所有元素的复杂性是什么。
非常感谢
答案 0 :(得分:9)
考虑单个插入排序链接列表的含义。你有一个新的元素必须在列表中的某个地方。
1)你必须在列表中找到正确的位置。这是线性搜索。为O(n)
2)插入很简单:创建新节点,修复指向上一个和下一个节点的指针。 O(1)
在这种情况下,O(n)超过O(1)所以它是O(n)。
元素的数量并不真正适用于big-O,因为它都是基于数量级的。
答案 1 :(得分:4)
首先,我建议您阅读Linked Lists上的维基百科文章,尤其是关于加快搜索的(小)部分。
现在,要回答您的问题,如果您已经知道要插入链接列表的位置,则插入链接列表需要O(1)时间。由于我们讨论的是已排序链接列表,并且您在不知道元素应该去哪里的情况下进行插入,因此您需要花费O(n)时间(因为您必须搜索整个列表以找到元素的位置)。请注意,实际添加元素是O(1),就像我上面说的那样。
请注意,这不是一个非常有效的搜索,因为搜索已排序的数组,例如,需要O(lg(n))时间(使用二进制搜索)。不幸的是,对于一个数组,在找到元素之后,插入本身不是O(1)(它通常是O(n)),这意味着即使搜索速度更快,使用数组也不会加快整体速度。