2010-12-23 67 views
0

這是我在Cormen,Leiserson,Rivest書中描述的插入排序的實現。唯一的區別是我正在使用inner for循環而不是while循環。我覺得它有點笨重。我怎樣才能簡化這個?如何改進插入排序例程?

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 2010-12-23 02:48:38

+2

@robert OP顯然對理解插入排序算法感興趣,而不是對特定列表進行排序。 – mjv 2010-12-23 02:53:19

回答

0
  1. 而不是通過range(len(list)迭代做for index, item in enumerate(list)的。在這種情況下,索引將是您的索引,並且項目將是您正在查看的項目的值。
  2. 對嵌套for循環做同樣的事情。

順便說一句,裏貝里是我最喜歡的足球運動員之一。