3 回答

TA貢獻1828條經驗 獲得超13個贊
為了解釋為什么您的腳本現(xiàn)在無法正常工作,我將變量重命名unsorted為sorted。
首先,您的列表尚未排序。當然,我們設置sorted為False。
一旦開始while循環(huán),我們就假定該列表已經排序。想法是這樣的:一旦找到兩個順序不正確的元素,我們就sorted回到False。只有沒有順序錯誤的元素sorted才會保留。True
sorted = False # We haven't started sorting yet
while not sorted:
sorted = True # Assume the list is now sorted
for element in range(0, length):
if badList[element] > badList[element + 1]:
sorted = False # We found two elements in the wrong order
hold = badList[element + 1]
badList[element + 1] = badList[element]
badList[element] = hold
# We went through the whole list. At this point, if there were no elements
# in the wrong order, sorted is still True. Otherwise, it's false, and the
# while loop executes again.
還有一些小問題,可以幫助提高代碼的效率或可讀性。
在for循環(huán)中,使用變量element。從技術上講,element不是元素;它是代表列表索引的數(shù)字。而且,它很長。在這些情況下,只需使用臨時變量名即可,例如i“ index”。
for i in range(0, length):
該range命令還可以僅接受一個參數(shù)(名為stop)。在這種情況下,您將獲得從0到該參數(shù)的所有整數(shù)的列表。
for i in range(length):
《Python樣式指南》建議使用下劃線將變量命名為小寫。對于這樣的小腳本,這是一個很小的缺點。它會讓您習慣于Python代碼最常類似于的東西。
def bubble(bad_list):
要交換兩個變量的值,請將它們寫為元組分配。右側被評估為元組(例如(badList[i+1], badList[i])is (3, 5)),然后被分配給左側的兩個變量((badList[i], badList[i+1]))。
bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]
放在一起,你會得到:
my_list = [12, 5, 13, 8, 9, 65]
def bubble(bad_list):
length = len(bad_list) - 1
sorted = False
while not sorted:
sorted = True
for i in range(length):
if bad_list[i] > bad_list[i+1]:
sorted = False
bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]
bubble(my_list)
print my_list
(順便說一句,我也刪除了您的打印聲明。)

TA貢獻1864條經驗 獲得超2個贊
氣泡分類的目的是在每輪底部移動較重的物品,同時向上移動較輕的物品。在內部循環(huán)中,您可以在其中比較元素,而不必每次都迭代整個列表。將最重的已經放在最后。該交換變量是一個額外的檢查,所以我們可以標記列表現(xiàn)在可以正確排序,并避免不必要的計算仍在繼續(xù)。
def bubble(badList):
length = len(badList)
for i in range(0,length):
swapped = False
for element in range(0, length-i-1):
if badList[element] > badList[element + 1]:
hold = badList[element + 1]
badList[element + 1] = badList[element]
badList[element] = hold
swapped = True
if not swapped: break
return badList
您的版本1已更正:
def bubble(badList):
length = len(badList) - 1
unsorted = True
while unsorted:
unsorted = False
for element in range(0,length):
#unsorted = False
if badList[element] > badList[element + 1]:
hold = badList[element + 1]
badList[element + 1] = badList[element]
badList[element] = hold
unsorted = True
#print badList
#else:
#unsorted = True
return badList

TA貢獻1770條經驗 獲得超3個贊
當您使用負含義的變量名時,您需要反轉它們的值,這就是這種情況。以下內容將更容易理解:
sorted = False
while not sorted:
...
另一方面,算法的邏輯有點偏離。您需要檢查在for循環(huán)期間是否交換了兩個元素。這是我的寫法:
def bubble(values):
length = len(values) - 1
sorted = False
while not sorted:
sorted = True
for element in range(0,length):
if values[element] > values[element + 1]:
hold = values[element + 1]
values[element + 1] = values[element]
values[element] = hold
sorted = False
return values
添加回答
舉報