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)