2016-03-22 12 views
-1
def bubble_down(L, start, end): 
    """ (list, int, int) -> NoneType 

    Bubble down through L from indexes end through start, swapping items that are out of place. 

    >>> L = [4, 3, 2, 1, 0] 
    >>> bubble_down(L, 1, 3) 
    >>> L 
    [4, 1, 3, 2, 0] 
    """ 
    for i in range(start, end): 
     if L[i] < L[i]: 
      L[i - 1], L[i] = L[i], L [i - 1] 

この関数は実行されません....私はdocstringの例Lが[4,1,2、0]ではなく[4,1,2 、3、0]Python 3が助けを必要とする

+0

は(非自明なワンライナーのための対話モードを使用しない)ファイルにコードを記述します。あなたの 'if'条件が間違っています。インデックスの1つとして「i-1」が必要です。この方法では、決して保持することはありません(常に 'False')。ループ内で何も起こりません。 – pepr

+2

downvotersへのコメントです。質問者のポイントと国家に気づいてください。だから、彼はおそらく初心者で、質問を表現するのが難しいかもしれません。 downvoteボタンは、「私はそれが好きではありません」または「わかりません」のためのボタンではありません。あなたがdownvote場合はあなたのコメントを書いてください。 – pepr

+0

(あなたが '[i-1]'を修正したと仮定します)あなたはリストを一回しか越えていないので、必要な変更は全て最初のパスで必ずしも起こるわけではありません。バブルソートなので、すべて正しくソートされています。 –

答えて

0

あなたはほぼあります。あなたの比較は間違っています(あなたは同じ要素を比較しています)、あなたはおそらくあなたの最後のボンドライターについてもう少し考えるべきです。 最も重要なことは、変更がない限り、プロセスを反復したいとします。

ここでは、正しいバージョンです:

def bubble_down(to_sort, start=0, end=None): 
    if end is None: 
     end = len(to_sort) 
    did_change = True 
    while did_change: 
     did_change = False 
     for i in range(start, end-1): 
      if to_sort[i] > to_sort[i+1]: 
       did_change = True 
       to_sort[i], to_sort[i+1] = to_sort[i+1], to_sort[i] 

    return to_sort 


>>> print(bubble_down([5, 7, 6 , 1])) 
[1, 5, 6, 7] 
>>> print bubble_down([4, 3, 2, 1, 0]) 
[0, 1, 2, 3, 4] 
関連する問題