0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pythonで挿入ソートを実装してみた

Last updated at Posted at 2020-02-14

pythonとアルゴリズムの勉強かねがね、挿入ソートを実装してみました。

1.ランダムなリストを作成する
例:
[4,2,3,0,1]

2.一番左の値を取り出す
例:
[4,2,3,0,1]→4を取り出す

3.4を操作完了にする(初回は比較対象がないので)

[2,3,0,1]→[4]→4は操作完了

4.また一番左の値を取り出す

[2,3,0,1]→2を取り出す

5.操作完了の値と比較して、今回取り出した値のほうが小さければ位置を入れ替える。
 今回取り出した値のほうが大きければ、取り出した値を操作完了として次の数字を取り出してくる。

[3,0,1]→[4,2]→4より2のほうが小さいので値を入れ替え→[2,4]→左端に到達したので2は操作完了
[0,1]→[2,4,3]→4より3のほうが小さいので値を入れ替え→[2,3,4]→2より3のほうが大きいので値は入れ替えず3は操作完了

-すべての値が操作済になるまで5を繰り返す。

…という処理を挿入ソートと呼ぶらしいです。

import random

# 準備する値の数を入力
numbers = 10

# チェック済の値を格納するリストの作成
pop_list = []

# 乱数の作成
num_list = list(range(numbers))
random.shuffle(num_list)

def _insert_sort(num_list, pop_list):
    pop_list.append(num_list.pop(0))
    pop_num = pop_list[-1]
    print(pop_list)
    for i in range(1,len(pop_list)):
        check_num = pop_list[-i-1]
        if check_num > pop_num:
            pop_list[-i] = check_num
            pop_list[-i-1] = pop_num
        else:
            break
    
    return num_list, pop_list



def main(num_list, pop_list):
    # メイン処理
    print("START : ",num_list)

    while True:
        num_list, pop_list = _insert_sort(num_list, pop_list)
        if len(num_list) == 0:
            break

    print("GOAL  : ",pop_list)

if __name__ == '__main__':
    main(num_list, pop_list)
0
1
2

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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?