質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • Python 3.x

    6430questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python:アルゴリズム(挿入ソート)

解決済

回答 3

投稿

  • 評価
  • クリップ 1
  • VIEW 153

nao_0560

score 1

 前提・実現したいこと

初歩的な質問で大変恐縮ではございますが、Python3でアルゴリズム(挿入ソート)を勉強中のプログラミング超初心者です。アルゴリズム(挿入ソート)の理解を深めたいのですが、ネストされたfor文+range関数の中身のデータの流れがいまいち理解できずにいます。

例えば。
全体のプログラムは、どのように流れていくのか?
range((i-1),-1,-1)の箇iにはどのようなデータが入るのか?
なぜ、(i-1)の箇所には括弧がついているのか?
そして、if文のa[j]の部分には、どんなデータが入るのか?
といった具合です。
申し訳ございませんが、ご教授いただければ幸いです。

 発生している問題・エラーメッセージ

 該当のソースコード

a = [10,3,1,4,2]
for i in range(1,len(a)):
    tmp = a[i]
    ins = 0
    for j in range((i-1),-1,-1):
        if (a[j] > tmp):
            a[j+1] = a[j]
        else:
            ins = j+1
            break
    a[ins] = tmp
print('ソート後 = ', a)

 試したこと

 補足情報(FW/ツールのバージョンなど)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+2

オンラインでPythonのコードを可視化できるツールというのがありまして。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/08 06:34

    コードを可視化できるツールというのがあるんですか。
    知りませんでした。
    勉強になりました。
    ありがとうございました。

    キャンセル

+2

回答になって無くて申し訳ありませんが、、、

データ数も 5個なので、デバッガでステップ実行してみませんか?
(或いは、ループ毎に変数の内容を出力)
そうすれば、 i, j に何が入るか分かります。
a[]配列を見ると、どう入れ替わっていくのかも分かります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/08 06:59

    いえいえ、十分、ためになる回答でした!
    ループ毎に変数の内容を出力して一つ一つ確認してみます。
    デバッグのステップ機能、知りませんでした。
    勉強になりました。
    回答ありがとうございました。

    キャンセル

+2

2つ目のfor文の((i-1),-1,-1)は
「(i-1)から-1まで-1ずつ値を取りながら繰り返す」
という意味です。

つまりi=4なら
jは3,2,1,0,-1と値を取りながらfor文で処理されていきます。

i-1をかっこでくくっている意味は読みやすくするためではないかなと思います。
無くても動きそうです。

全体の流れはWikiを見たほうが手っ取り早そうです。
wiki

あとはやっぱり実際にデバッグのステップ機能を使って値を確認しつつ動かしてみるのが一番ですね。
printで変数を逐一標準出力して流れを確認するのも手です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/08 06:47

    デバッグのステップ機能を使って値を確認しつつ動かすというやり方もあったんですね。
    デバッグのステップ機能、知りませんでした。
    めちゃめちゃ、超初心者ですいません。
    勉強になりました。
    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    ソート結果が正しくない

    前提・実現したいこと csvファイルdata1.csvおよびそれと同じフォーマットのcsvファイルdata2.csv, csvファイルdata3.csvのそれぞれに対して,温度(

  • 受付中

    ターミナルで実行するのに時間がかかりすぎる

    ターミナルで実行するのに時間がかかりすぎます。 画像圧縮のアルゴリズムを書いています。 N × N ピクセルのグレースケール画像があり各ピクセルの画素値は 0 から 255

  • 解決済

    配列の中身を文字列として取得させたい

    配列の中身を文字列として取得させたいです。 image配列に [2, 5, 5, 2] という要素が入っています。 これを、 2 5 5 2 というように2行2列で

  • 受付中

    大量のCSVデータの処理方法

    100個ほどCSVファイルがあり、 それぞれのファイルで、30×30のセルに数値が入力されています。 この100個のCSVファイルに対して、同じセル座標について最大値最小値を計算し

  • 解決済

    python for 0での初期化

    import csv csv_obj = csv.reader(open("sample.csv", "r")) dt = [ v for v in csv_obj] dat = 

  • 解決済

    構造の異なる辞書をソートしたい

    構造の異なる辞書をソートしたい。 辞書dfには df = [{"A":{"A1":{"a1":100,"b1":200,"c1":300}}},{"B":{"B1":{"a2"

  • 解決済

    Python ガウス消去法の中に出てくるZeroDivisionErrorが解決できません

     前提・実現したいこと python3.xで、連立一次方程式をPivot選択付きGauss消去法で解こうとしています。前進消去法の計算過程でエラーが出てしまいます。 Ax=bについ

  • 解決済

    クラスタごとにプロットしたい。

     前提・実現したいこと K平均法を実装しようとしています。 xとyの2次元の30個のデータをクラスタリングしたいと思っています。 データはエクセエルを読み込みます。 クラスタ数は2

同じタグがついた質問を見る

  • Python 3.x

    6430questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。