0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ひとまず、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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?