2010-12-23 6 views
0

これはCormen、Leiserson、Rivestの本で説明した挿入ソートの実装です。唯一の違いは、whileループの代わりにinner forループを使用していることです。私はそれが少しclunkyだと思う。どのように私はこれを簡単にすることができますか?この挿入ソートルーチンをどのように改善できますか?

def isort(list): 
    if len(list) <= 1: 
    return list 

    # pick the next item for insertion from LEFT to RIGHT 
    for j in range(1, len(list)): 
    current = list[j] 

    # invariant: [0:j-1] is sorted 
    # range(0,j) returns everything up j-1 
    # Pick the next item to compare from RIGHT TO LEFT 

    ip = j-1 
    inorder = False 
    moved = False 

    for i in reversed(range(0,j)): 
     ip = i 
     if list[i] > current: 
     # move it to the right 
     list[i+1] = list[i] 
     moved = True 
     else: 
     inorder = True 
     break; 

    if moved: 
     if inorder: 
     list[ip+1] = current 
     else: 
     list[ip] = current 

    return list 
+1

「どうすれば簡単にできますか?」あなたのリストに '.sort()'を呼んでください。 – robert

+2

@robert OPは、特定のリストをソートするのではなく、挿入ソートアルゴリズムを理解することに明らかです。 – mjv

+0

私は挿入の並べ替えとPythonを学んでいます。これは教育的な運動です。 –

答えて

0
  1. 代わりのrange(len(list)を反復for index, item in enumerate(list)を行います。その場合、インデックスはあなたのインデックスになり、アイテムはあなたが見ているアイテムの値になります。
  2. ネストされたforループに対しても同じ処理を行います。

私はフランクリベリーが好きなサッカー選手の一人です。

+0

私はあなたの提案を試してみます。はい、リベリは岩です。バットは醜いが、非常に才能がある。 –

関連する問題