0

これは私のpython putのバブルソートで、問題が見つからないようです。

より複雑な並べ替えアルゴリズムの作成を開始しようとしていますが、まずバブル 並べ替えが機能しない理由を理解する必要があります。

アサートは、プログラムが正しくソートされない場合にプログラムをクラッシュさせるために挿入されます (これは、プログラムを実行するたびに発生します (デバッグを含む))。

N=5000
#function to sort a list
def bubble_sort(numbers):
    to_go = len(list_n)
    while to_go != 0:
        newn = 0
        for i in range(1, to_go):
            if list_n[i-1] > list_n[i]:
                swap(i-1, i)
                newn = i
        to_go = newn
def swap(item_1, item_2):
    list_n[item_1], list_n[item_2] = list_n[item_2], list_n[item_1]

list_n = []
for e in range(0,N):
    list_n.append(random.randint(1,N-1))
copy = list_n[:]
#time the sorting routine
t1 = time.clock()
bubble_sort(copy)
t2 = time.clock()
#make sure the list was sorted correctly
list_n.sort()
assert(list_n==copy) 
#print how long the function took to do the sort
print 'mySort took', t2-t1, 'seconds.'
4

1 に答える 1

1

問題は基本的に、リストを渡して関数に関してソートすることですがnumbersbubble_sort関数内ではそのパラメーターを使用することはありません。

のすべての出現箇所list_nnumbersinbubble_sortに置き換え、それを追加のパラメーターとしてswap関数に渡す必要があります。これにより、グローバル変数ではなく、作業中のリスト内の数値を実際に交換することができますlist_n

于 2013-04-13T15:43:27.117 に答える