2017-06-06 99 views
1

嗨我回顧了其他文章冒泡排序,但解決方案在我的情況下不起作用: 所以算法的工作,直到我循環幾次重複。但是我怎樣才能不用輸入呢?這裏是我的代碼,所以你知道我的意思:蟒蛇 - 泡沫排序

x = [0, 0, 1, 3, 3, 2, 2, 1, 0, 4, 5] 

h = None 
flag = True 

while flag == True: 
    #flag = True 
    for i in range(len(x) - 1): 
     if x[i] > x[i + 1]: 
    #  flag = False 
      h = x[i] 
      x[i] = x[i + 1] 
      x[i + 1] = h 
    print(x)   

    #input = raw_input('Satisfied? ') 
    #if input == 'q': 
    # break 

print(x) 
''' 
we can replace variable h, with: 
x[i] , x[i+1] = x[i+1], x[i] 
''' 
+1

你可以在你的輸入列表重複,以檢查是否有任何反轉或者你可以指望逆轉的次數在當前迭代中,如果他們是0,那麼你'done – mimre

回答

3

您可以使用Python中的sorted功能,並改變你的代碼:

while flag == True: 
    for i in range(len(x) - 1): 
     if x[i] > x[i + 1]: 
      h = x[i] 
      x[i] = x[i + 1] 
      x[i + 1] = h 

    if sorted(x) == x: #x is already sorted 
     flag = False 

編輯:這沒有按」替代解決方案t使用Python內置的排序功能:

while flag == True: 
    flag = False 
    for i in range(len(x) - 1): 
     if x[i] > x[i + 1]: 
      flag = True 
      h = x[i] 
      x[i] = x[i + 1] 
      x[i + 1] = h 

希望我幫了忙!

+1

編輯顯示使用情況。 – BluCode

+0

事實上,謝謝你我學到了一些有用的很酷的伎倆(x):) –

+2

在設計用於排序的函數中使用'sorted'有點奇怪。 – DSM

1

使用此算法,您可以事先知道排序整個數組需要多少個步驟(max),因爲算法是收斂的和有界的。在每次傳球中,最高的無位置值被正確放置,因此您需要n-1次傳球才能完成排序。

下面的例子:

mylist = [54,26,93,17,77,31,44,55,20] 

for num in range(len(mylist)-1, 0, -1): 
    for i in range(num): 
     if mylist[i] > mylist[i+1]: 
      aux = mylist[i] 
      mylist[i] = mylist[i+1] 
      mylist[i+1] = aux 


print(mylist) 

希望它可以幫助

PS:你打算怎麼辦,停止當列表第n-1個行程之前排序,更好地用「插入完成算法」。在這裏有插入和冒泡排序之間的一個有趣的對比: Insertion sort vs Bubble Sort Algorithms

+0

這很有趣。感謝分享鏈接到插入。謝謝。我需要更多的知識,我想學習。 –