pythonとアルゴリズムの勉強かねがね、バブルソートを実装してみました。
1.ランダムなリストを作成する
例:
[1,3,0,4,2]
2.操作対象リストの右端の値と隣の値を比較して、右側が小さければ値を入れ替え
左端に到達するまで比較を繰り返す
例:
[1,3,0,4,2]→(4と2を比較して2が小さいので入れ替えする)→[1,3,0,2,4]
[1,3,0,2,4]→(0と2を比較して0が小さいので入れ替えなし)→[1,3,0,2,4]
[1,3,0,2,4]→(3と0を比較して0が小さいので入れ替えする)→[1,0,3,2,4]
[1,0,3,2,4]→(1と0を比較して0が小さいので入れ替えする)→[0,1,3,2,4]
3.左端まで比較が終わると、左端の値がリスト内で一番小さい値になるので
左端の値を操作済みリストに移行して、操作対象のリストから除外する
-操作済リストの中身がラスト1個になるまで2.と3.を繰り返す-
…という処理をバブルソートと呼ぶらしいです。
(4.ラスト1個は比較せず操作済リストに移行する)
bubble_sort.py
import random
# 準備する値の数を入力
numbers = 10
# チェック済の値を格納するリストの作成
pop_list = []
# 乱数の作成
num_list = list(range(numbers))
random.shuffle(num_list)
def _num_checker(num_list, pop_list):
# 一番右の値を取り出し(_a)、隣の値(_b)と比較する
# 左端まで大小比較を行う
for i in range(-1,len(num_list)*-1, -1):
_a = num_list[i]
_b = num_list[i-1]
# 右の値が左の値より小さかったら値を入れ替える
if _a < _b:
num_list[i] = _b
num_list[i-1] = _a
# 一番左の値を移動済リストに送る
pop_list.append(num_list[0])
num_list.remove(num_list[0])
return num_list, pop_list
# メイン処理
print("START : ",num_list)
for i in range(len(num_list)):
num_list, pop_list = _num_checker(num_list, pop_list)
print("GOAL : ",pop_list)