問題の説明
ランダムに配置された一連の数字を小さい順から大きい順に並べ替えます。
挿入アルゴリズム
配列から一度に 1 つの数値を取得し、既存の数値と比較して、適切な位置に挿入します。
このようにして、番号が取り出されるまで、つまり並べ替えが成功するまで、既存の番号を順番に保つことができるたびに繰り返します。
これは、トランプをプレイするときのカードを引く状況と非常によく似ています。
最初の条件: 手札のカードの順序を正しく保つ
2 つ目の条件: 新しいカードを取得するたびに、カードを手札に挿入します順番的には真ん中。
この 2 つの項目が変更されていないことを確認すると、何枚カードを引いても、手札の最後のカードが順番に配置されます。现Python実装:
def insertion_sort(n): if len(n) == 1: return n b = insertion_sort(n[1:]) m = len(b) for i in range(m): if n[0] <= b[i]: return b[:i]+[n[0]]+b[i:] return b + [n[0]]
別のバージョン:
def insertion_sort(lst): if len(lst) == 1: return lst for i in xrange(1, len(lst)): temp = lst[i] j = i - 1 while j >= 0 and temp < lst[j]: lst[j + 1] = lst[j] j -= 1 lst[j + 1] = temp return lst