配列内の偶数を配列の前に移動し、奇数を配列の後ろに移動しようとしています。問題は、線形アルゴリズムでこれを実行し、インプレースでこれを実行することを求めています。
私はこれを思いついた:
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 ^ 2)ではなくO(n)で実用的な目的で実行されるためです。 。これは正しい評価ですか?
また、フォーラムの誰かがa.append
上記を変更し、奇数を探すように変更していました。誰も答えなかったので、私は疑問に思いました。a.appendは最後に移動するのでo(n)関数ではありませんか?o(1)ですか?
説明と説明をありがとう!