Last Updated: 2/6/2024, 5:44:57 AM
# バブルソート
# 概要
すごくわかりやすい
# コード
#
# 対話モード >>> に
# コピペで実行できます。
#
def bubble_sort(lst):
n = len(lst)
for i in reversed(range(n)):
for j in range(i):
if lst[j] > lst[j + 1]:
lst[j], lst[j + 1] = lst[j + 1], lst[j]
lst = [3333, 5123, 9981, 1243, 7412]
bubble_sort(lst)
print(lst)
# [1243, 3333, 5123, 7412, 9981]
# 途中結果を表示する。
途中経過を表示するコードを書きました。
#
# 対話モード >>> に
# コピペで実行できます。
#
def bubble_sort(lst):
n = len(lst)
for i in reversed(range(n)):
for j in range(i):
print_progress(lst, i, j)
if lst[j] > lst[j + 1]:
lst[j], lst[j + 1] = lst[j + 1], lst[j]
def print_progress(lst, i, j):
print(' '.join(f'{e:2d}' for e in lst))
print(' '.join(progress(lst, i, j)))
print()
def progress(lst, i, j):
prog = [' '] * (i + 1) + ['--'] * (len(lst) - (i + 1))
prog[j] = prog[j + 1] = 'xx' if lst[j] > lst[j + 1] else 'oo'
return prog
import random
lst = [random.randint(0, 99) for i in range(5)]
bubble_sort(lst)
print(lst)
こんな感じで表示してくれます。
oo
は交換しなくていいもの。
xx
は交換するもの。
--
はソート済みのものです。
>>> bubble_sort(lst)
48 65 52 68 26
oo oo
48 65 52 68 26
xx xx
48 52 65 68 26
oo oo
48 52 65 68 26
xx xx
48 52 65 26 68
oo oo --
48 52 65 26 68
oo oo --
48 52 65 26 68
xx xx --
48 52 26 65 68
oo oo -- --
48 52 26 65 68
xx xx -- --
48 26 52 65 68
xx xx -- -- --
>>> print(lst)
[26, 48, 52, 65, 68]
>>>