以前に Ruby でバブルソート、選択ソート、挿入ソートを実装してみました(参照)が、Python でもやってみました。リストの(浅い)コピーってどうやるのかと思った。それから、Python は Ruby とちがって「モンキーパッチ」ができないのですね。あと、range(n = len(ar))
のような書き方もできない。
def bubble_sort(a): ar = a[:] for i in range(len(ar) - 1, 0, -1): for j in range(0, i): if ar[j] > ar[j + 1]: ar[j], ar[j + 1] = ar[j + 1], ar[j] return ar def selection_sort(a): ar = a[:] n = len(ar) for i in range(n): min_idx = i for j in range(i + 1, n): if ar[j] < ar[min_idx]: min_idx = j ar[i], ar[min_idx] = ar[min_idx], ar[i] return ar def insertion_sort(a): ar = a[:] for i in range(1, len(ar)): j = i while j > 0 and ar[j - 1] > ar[j]: ar[j], ar[j - 1] = ar[j - 1], ar[j] j -= 1 return ar print(insertion_sort([16, 14, 10, 8, 7, 9, 3, 2, 4, 1])) #=>[1, 2, 3, 4, 7, 8, 9, 10, 14, 16]