アルゴリズムの練習です。
挿入ソートの実装をPythonで試してみます。
例 リストにバラバラに格納されている数値を昇順にする。




同様の動作をループしていきます。



こんな感じで絵を描いてみました。
以下、実装例です。
l = [2, 1, 4, 3]
for i in range(len(l)):
tmp = l[i]
for j in range(i-1, -1, -1):
if l[j] > tmp:
l[j+1] = l[j]
l[j] = tmp
print(l)
# 出力内容
# [1, 2, 3, 4]
もっと大きな要素数で試してみます。
l = [
549,570,88,752,882,280,965,823,54,189,871,923,180,972,308,262,621,991,981,98,123,0,527,249,802,11,464,69,412,
772,630,978,454,672,781,376,575,945,519,854,719,707,368,304,921,390,140,516,359,945,676,463,990,489,76,776,
940,206,849,22,361,811,537,47,600,242,395,646,670,867,236,447,542,203,702,239,372,593,473,115,916,788,925,
636,843,613,285,964,739,372,730,468,781,19,945,192,778,57,226,350
]
for i in range(len(l)):
tmp = l[i]
for j in range(i-1, -1, -1):
if l[j] > tmp:
l[j+1] = l[j]
l[j] = tmp
print(l)
# 出力内容
# [
# 0, 11, 19, 22, 47, 54, 57, 69, 76, 88, 98, 115, 123, 140, 180, 189, 192, 203, 206, 226, 236, 239, 242, 249, 262, 280,
# 285, 304, 308, 350, 359, 361, 368, 372, 372, 376, 390, 395, 412, 447, 454, 463, 464, 468, 473, 489, 516, 519, 527,
# 537, 542, 549, 570, 575, 593, 600, 613, 621, 630, 636, 646, 670, 672, 676, 702, 707, 719, 730, 739, 752, 772, 776,
# 778, 781, 781, 788, 802, 811, 823, 843, 849, 854, 867, 871, 882, 916, 921, 923, 925, 940, 945, 945, 945, 964, 965,
# 972, 978, 981, 990, 991
# ]
本当に合っているのかどうか確認するのが目では確認できないので、以下の方法で確認しました。
l = [
549,570,88,752,882,280,965,823,54,189,871,923,180,972,308,262,621,991,981,98,123,0,527,249,802,11,464,69,412,
772,630,978,454,672,781,376,575,945,519,854,719,707,368,304,921,390,140,516,359,945,676,463,990,489,76,776,
940,206,849,22,361,811,537,47,600,242,395,646,670,867,236,447,542,203,702,239,372,593,473,115,916,788,925,
636,843,613,285,964,739,372,730,468,781,19,945,192,778,57,226,350
]
for i in range(len(l)):
tmp = l[i]
for j in range(i-1, -1, -1):
if l[j] > tmp:
l[j+1] = l[j]
l[j] = tmp
print(l)
# 出力内容
# [
# 0, 11, 19, 22, 47, 54, 57, 69, 76, 88, 98, 115, 123, 140, 180, 189, 192, 203, 206, 226, 236, 239, 242, 249, 262, 280,
# 285, 304, 308, 350, 359, 361, 368, 372, 372, 376, 390, 395, 412, 447, 454, 463, 464, 468, 473, 489, 516, 519, 527,
# 537, 542, 549, 570, 575, 593, 600, 613, 621, 630, 636, 646, 670, 672, 676, 702, 707, 719, 730, 739, 752, 772, 776,
# 778, 781, 781, 788, 802, 811, 823, 843, 849, 854, 867, 871, 882, 916, 921, 923, 925, 940, 945, 945, 945, 964, 965,
# 972, 978, 981, 990, 991
# ]
# リスト l をコピー
x_l = [
549,570,88,752,882,280,965,823,54,189,871,923,180,972,308,262,621,991,981,98,123,0,527,249,802,11,464,69,412,
772,630,978,454,672,781,376,575,945,519,854,719,707,368,304,921,390,140,516,359,945,676,463,990,489,76,776,
940,206,849,22,361,811,537,47,600,242,395,646,670,867,236,447,542,203,702,239,372,593,473,115,916,788,925,
636,843,613,285,964,739,372,730,468,781,19,945,192,778,57,226,350
]
x_l.sort()
print(l == x_l)
# 出力内容
# True
完全一致している事が確認できました。
挿入ソートの実装は上手くいったようです。