kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

ALDS1_6_B: Partition

今回も擬似コード翻訳すれば終わりなんだけどなんかややこしい
ノートに絵を書いてみるまでピンとこなかった
(解説見れば書いてあるんだけど)

def swap(A, i, j):
    tmp = A[i]
    A[i] = A[j]
    A[j] = tmp

def partition(A, p, r):
    x = A[r]
    i = p - 1
    for j in range(p, r):
        if A[j] <= x:
            i += 1
            swap(A, i, j)
    swap(A, i + 1, r)
    return i + 1

def bracketify(A, i, q):
    return "[" + str(A[i]) + "]" if i == q else str(A[i])

def main():
    n = int(input())
    A = [int(x) for x in input().split()]
    q = partition(A, 0, n - 1)
    print(*[bracketify(A, i, q) for i in range(n)])

main()

イテレータで書き換えてみようかと思ったけど
要素の入れ替えとか最後の要素を見るとか無理な気がしてきたので放置
新しいリストにappendしていくのだとマージになってしまうし