ひとまず、Cランクの問題を全部解き終えたので、
Pythonのスキルチェックを受けてきたら普通にできた。
(もともとPHPでCランクはとっていたけど)
というわけでいまからBランクを目指す。
Bランクへの道というのがあるらしくて
これを読むとどうやら配列の次にソートアルゴリズムを学ぶ必要がある。
問題集を見るとクラスもあるはずなのだが、まあそれもやるってことで。
ひとまずソートアルゴリズムシリーズを解いていくことにする。
def insert_sort(n,A):
for i in range(1,n):
#A[i] を、整列済みの A[0] ~ A[i-1] の適切な位置に挿入する
# 実装の都合上、A[i] の値が上書きされてしまうことがあるので、予め A[i] の値をコピーしておく
x = A[i]
#jは適切な挿入位置を表す変数
#まずi-1から始まる
j = i-1
# A[i] の適切な挿入位置が見つかるまで、A[i] より大きい要素を1つずつ後ろにずらしていく
while j >= 0 and A[j] > x:
A[j+1] = A[j]
j -= 1
#A[i] を挿入
A[j+1] = x
print(*A)
n = int(input())
A = list(map(int,input().split()))
insert_sort(n,A)
いぜん少々アルゴリズムを聞きかじってはいたので、その知識からどうコードを組み立てるか考えたが、
1)A[i]が挿入元となるターゲット
2)A[0] ~ A[i-1]までの要素をA[i]と比較する。
比較対象ターゲットをA[j]とする。jはi-1からはじまり、0まで続く。
while文になる
3)while文が終わった時点で、隣が挿入位置になるのでA[i]の要素を代入。
4)結果をプリントする。
5)あとは繰り返し
出力:
1 4 3 5 2
1 3 4 5 2
1 3 4 5 2
1 2 3 4 5