0
0

More than 3 years have passed since last update.

pythonでバブルソートを実装してみた

Last updated at Posted at 2020-02-11

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)

0
0
0

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
0