我试图将数组中的偶数移动到数组的前面,将奇数移动到数组的后面。问题要求在线性算法中执行此操作并就地执行此操作。
我想出了这个:
def sort(a):
for i in range(0,len(a)-1):
if a[i]%2==0:
a.insert(0,a.pop(i))
return a
问题是,有人告诉我,从技术上讲,a.insert 是一个 o(n) 函数,所以从技术上讲,这将被视为非线性算法(当包括for i in range
函数的一部分时)。由于提出这个问题的论坛已有几个月的历史,我无法要求解释。
基本上我相信他说的是“技术上”,因为因为这会将它插入到前面,所以它不会检查数组中的另外 N 个元素,因此使它在 O(n) 而不是 O(n^2) 时出于实际目的而运行. 这是一个正确的评估吗?
另外,论坛上的某个人曾经a.append
修改过上述内容并将其更改为查找奇数。没有人回答,所以我想知道, a.append 不是 o(n) 函数,因为它将它移动到最后吗?是o(1)吗?
感谢您的解释和澄清!