2017-06-06 150 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

这很有趣。感谢分享链接到插入。谢谢。我需要更多的知识,我想学习。 –