如果我执行以下操作,则在
python列表中交换元素的时间复杂度是多少?
案例1 :(惯用法)在列表中交换两个元素
>>> a = [1, 2, 3, 4, 5]
>>> a[1], a[3] = a[3], a[1] # Pythonic Swap --> x, y = y, x
>>> print(a)
[1, 4, 3, 2, 5]
问题1:交换步骤的时间复杂度是多少? python内部做了什么.
案例2 :(非常低效的方式)在列表中交换两个元素
>>> a = [1, 2, 3, 4, 5]
>>> temp1, temp2 = a[1], a[3]
>>> del a[1] # a = [1, 3, 4, 5]
>>> a.insert(1, temp2) # a = [1, 4, 3, 4, 5]
>>> del a[3] # a = [1, 4, 3, 5]
>>> a.insert(3, temp1) # a = [1, 4, 3, 2, 5]
>>> print(a)
[1, 4, 3, 2, 5]
如果我这样做,每当我在任何索引处插入或删除所有存在于该索引的存储器地址时,需要分别向右或向左移动/复制一步.因此需要O(K),其中K是我们插入或删除的索引所在的地址数.如果我错了,请纠正我.
一些分析
如果列表非常小,那么运行时间的复杂性与我使用的(Case1或Case2)方法无关.但是如果列表非常大,如a = [i for i in range